Изучаем 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())