Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 12, 2016 15:25:40

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

dict.fromkeys

Добрый вечер.

 d = {}
for _ in range(int(input("Введите количество стран: "))):
    country = input("Введите страну: ")
    city = input("Введите город для этой страны: ").split()
    d.fromkeys(city, country)
print(d)
Выходит функцию fromkeys нельзя использовать в качестве заполнителя словаря? Ибо словарь с переменной d остается пустым после завершения цикла. Но стоит присвоить переменную этой функции, например, d = dict.fromkeys(city, country), то другое дело, однако, если стран более 1-й она будет перезаписываться.

Заранее спасибо за ответ.

Офлайн

#2 Дек. 12, 2016 15:32:48

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

dict.fromkeys

 d = {}
for _ in range(int(input("Введите количество стран: "))):
    country = input("Введите страну: ")
    city = input("Введите город для этой страны: ").split()
    for a in city:
        d.setdefault(a, country)
print(d)

Реализовал таким способом, однако, мой вопрос все равно остается актуальным.

Офлайн

#3 Дек. 12, 2016 16:17:18

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

dict.fromkeys

Dorum
Выходит функцию fromkeys нельзя использовать в качестве заполнителя словаря?
Можно, если понимать, как она работает. Для этого достаточно прочитать справку
давайте я вам процитирую
dict.fromkeys
Добавлено в 2.3
Возвращает новый словарь, сформированный из указанной последовательности, с указанным значением элементов.
Прототип
fromkeys(seq)
Параметры
seq : Любая последовательность, например список list.
Ну и где у вас последовательность? Последовательность - это список, итератор, генератор или что-то что можно перебрать. Это работает вот так
 d = dict.fromkeys([1, 2, 3, 4, 5, 6], False)



Офлайн

#4 Дек. 12, 2016 16:54:46

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

dict.fromkeys

FishHook
Ну и где у вас последовательность?
Как же? Я использую city в качестве последовательности.
  d = {}
for _ in range(int(input("Введите количество стран: "))):
    country = input("Введите страну: ")
    city = input("Введите город для этой страны: ").split()
    d.fromkeys(city, country)
print(d)

Офлайн

#5 Дек. 12, 2016 17:01:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

dict.fromkeys

Ну так блин же!
fromkeys не меняет содержимое словаря, этот метод возвращает новый словарь, то есть ваша пятая строка d.fromkeys(city, country) вообще ничего полезного не делает. Она возвращает значение, которое вы не используете.



Офлайн

#6 Дек. 12, 2016 17:10:03

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

dict.fromkeys

вы неправильно fromkeys используете.
замените d.fromkeys(city, country) на d.update(dict.fromkeys(city, country)) и будет вам счатье.
Выше уже написали почему так. fromkeys не меняет текущий словарь.
Ах да , и подумайте что вы получите если город будет называться “Нижний Новгород” например



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Дек. 12, 2016 17:25:51)

Офлайн

#7 Дек. 12, 2016 17:19:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

dict.fromkeys

Обычно, когда нужно такое поведение используют defaultdict



Офлайн

#8 Дек. 12, 2016 17:24:01

Dorum
Зарегистрирован: 2016-11-26
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

dict.fromkeys

FishHook
PEHDOM
Уловил. Спасибо!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version