Изучаем 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']