Изучаем Python | страница 85
Вы видите в точке (1) , что значение, связанное с каждым именем, теперь представляет собой список. У некоторых участников только один любимый язык программирования, у других таких языков несколько. При переборе словаря в точке (2) переменная с именем languages используется для хранения каждого значения из словаря, потому что мы знаем, что каждое значение будет представлять собой список. В основном цикле по элементам словаря другой цикл (3) перебирает элементы списка любимых языков каждого участника.
Теперь каждый участник опроса может указать сколько угодно любимых языков программирования:
Jen's favorite languages are:
. .Python
. .Ruby
Sarah's favorite languages are:
. .C
Phil's favorite languages are:
. .Python
. .Haskell
Edward's favorite languages are:
. .Ruby
. .Go
Чтобы дополнительно усовершенствовать программу, включите в начало цикла for словаря команду if для проверки того, выбрал ли данный участник более одного языка программирования (проверка основана на значении len(languages)). Если у участника только один любимый язык, текст сообщения изменяется для единственного числа (например, «Sarah’s favorite language is C»).
примечание
Глубина вложения списков и словарей не должна быть слишком большой. Если вам приходится вкладывать элементы на глубину существенно бо?льшую, чем в предыдущих примерах, или если вы работаете с чужим кодом со значительной глубиной вложения, скорее всего, у задачи существует более простое решение.
Словарь в словаре
Словарь также можно вложить в другой словарь, но в таких случаях код быстро усложняется. Например, если на сайте есть несколько пользователей с уникальными именами, вы можете использовать имена пользователей как ключи в словаре. Информация о каждом пользователе при этом хранится в словаре, который используется как значение, связанное с именем. В следующем примере о каждом пользователе хранятся три вида информации: имя, фамилия и место жительства. Чтобы получить доступ к этой информации, переберите имена пользователей и словарь с информацией, связанной с каждым именем:
many_users.py
users = {
. .'aeinstein': {
. . . .'first': 'albert',
. . . .'last': 'einstein',
. . . .'location': 'princeton',
. . . .},
. .'mcurie': {
. . . .'first': 'marie',
. . . .'last': 'curie',
. . . .'location': 'paris',
. . . .},
. .}
(1) for username, user_info in users.items():
(2) . .print("\nUsername: " + username)
(3) . .full_name = user_info['first'] + " " + user_info['last']