122
Глава 6 •
Словари
Все пришельцы обладают одинаковыми характеристиками, но Python рассматри-
вает каждого пришельца как отдельный объект, что позволяет изменять атрибуты
каждого владельца по отдельности.
Как работать с таким множеством? Представьте, что в этой игре некоторые при-
шельцы изменяют цвет и начинают двигаться быстрее. Когда приходит время сме-
ны цветов, мы можем воспользоваться циклом
for
и командой
if
для изменения
цвета. Например, чтобы превратить первых трех пришельцев в желтых, двигающих-
ся со средней скоростью и приносящих игроку по 10 очков, можно действовать так:
# Создание пустого списка для хранения пришельцев.
aliens = []
# Создание 30 зеленых пришельцев.
for alien_number in range (0,30):
new_alien = {'color': 'green', 'points': 5, 'speed': 'slow'}
aliens.append(new_alien)
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
# Вывод первых 5 пришельцев:
for alien in aliens[0:5]:
print(alien)
print("...")
Чтобы изменить первых трех пришельцев, мы перебираем элементы сегмента,
включающего только первых трех пришельцев. В данный момент все пришельцы
зеленые (
'green'
), но так будет не всегда, поэтому мы пишем команду
if
, которая
гарантирует, что изменяться будут только зеленые пришельцы. Если пришелец
зеленый, то его цвет меняется на желтый (
'yellow'
), скорость — на среднюю
(
'medium'
), а награда увеличивается до 10 очков:
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'medium', 'color': 'yellow', 'points': 10}
{'speed': 'slow', 'color': 'green', 'points': 5}
{'speed': 'slow', 'color': 'green', 'points': 5}
...
Цикл можно расширить, добавив блок
elif
для превращения желтых пришельцев
в красных — быстрых и приносящих игроку по 15 очков. Мы не станем приводить
весь код, а цикл выглядит так:
for alien in aliens[0:3]:
if alien['color'] == 'green':
alien['color'] = 'yellow'
alien['speed'] = 'medium'
alien['points'] = 10
Вложение
123
elif alien['color'] == 'yellow':
alien['color'] = 'red'
alien['speed'] = 'fast'
alien['points'] = 15
Решение с хранением словарей в списке достаточно часто встречается тогда, когда
каждый словарь содержит разные атрибуты одного объекта. Например, вы можете
создать словарь для каждого пользователя сайта, как это было сделано в програм-
ме
user .py
на с. 114, и сохранить отдельные словари в списке с именем
users
. Все
словари в списке должны иметь одинаковую структуру, чтобы вы могли перебрать
список и выполнить с каждым объектом словаря одни и те же операции.
Список в
словаре
Вместо того чтобы помещать словарь в список, иногда бывает удобно поместить
список в словарь. Представьте, как бы вы описали в программе заказанную пиццу.
Если ограничиться только списком, сохранить удастся разве что список топпингов
к пицце. При использовании словаря список топпингов может быть всего лишь
одним аспектом описания пиццы.
В следующем примере для каждой пиццы сохраняются два вида информации: осно-
ва и список топпингов. Список топпингов представляет собой значение, связанное
с ключом
'toppings'
. Чтобы использовать элементы в списке, нужно указать имя
словаря и ключ
'toppings'
, как и для любого другого значения в словаре. Вместо
одного значения будет получен список топпингов:
Достарыңызбен бөлісу: