Изучаем Python | страница 84
Список в словаре
Иногда бывает удобно поместить список в словарь, вместо того чтобы помещать словарь в список. Представьте, как бы вы описали в программе заказанную пиццу. Если ограничиться только списком, сохранить удастся разве что список дополнений к пицце. При использовании словаря список дополнений может быть всего лишь одним аспектом описания пиццы.
В следующем примере для каждой пиццы сохраняются два вида информации: тип теста и список дополнений. Список дополнений представляет собой значение, связанное с ключом 'toppings'. Чтобы использовать элементы в списке, нужно указать имя словаря и ключ 'toppings', как и для любого другого значения в словаре. Вместо одного значения будет получен список дополнений:
pizza.py
# Сохранение информации о заказанной пицце.
(1) pizza = {
. .'crust': 'thick',
. .'toppings': ['mushrooms', 'extra cheese'],
. .}
# Описание заказа.
(2)print("You ordered a " + pizza['crust'] + "-crust pizza " +
. ."with the following toppings:")
(3)for topping in pizza['toppings']:
. .print("\t" + topping)
Работа начинается в точке (1) со словаря с информацией о заказанной пицце. С ключом в словаре 'crust' связано строковое значение 'thick'. С другим ключом 'toppings' связано значение-список, в котором хранятся все заказанные дополнения. В точке (2) выводится описание заказа перед созданием пиццы. Чтобы вывести список дополнений, мы используем ключ 'toppings', а Python берет список дополнений из словаря.
Следующее сообщение описывает пиццу, которую мы собираемся создать:
You ordered a thick-crust pizza with the following toppings:
. .mushrooms
. .extra cheese
Вложение списка в словарь может применяться каждый раз, когда с одним ключом словаря должно быть связано более одного значения. Если бы в предыдущем примере с языками программирования ответы сохранялись в списке, один участник опроса мог бы выбрать сразу несколько любимых языков. При переборе словаря значение, связанное с каждым человеком, представляло бы собой список языков (вместо одного языка.) В цикле for словаря создается другой цикл для перебора списка языков, связанных с каждым участником:
favorite_languages.py
(1) favorite_languages = {
. .'jen': ['python', 'ruby'],
. .'sarah': ['c'],
. .'edward': ['ruby', 'go'],
. .'phil': ['python', 'haskell'],
. .}
(2)for name, languages in favorite_languages.items():
. .print("\n" + name.title() + "'s favorite languages are:")
(3) . .for language in languages:
. . . .print("\t" + language.title())