Пара «ключ—значение» представляет собой данные, связанные друг с другом. Если
вы укажете ключ, то Python вернет значение, связанное с этим ключом. Ключ отде-
ляется от значения двоеточием, а отдельные пары разделяются запятыми. В словаре
может храниться любое количество пар «ключ—значение».
Простейший словарь содержит ровно одну пару «ключ—значение», как в следу-
ющей измененной версии словаря
alien_0
:
alien_0 = {'color': 'green'}
В этом словаре хранится ровно один фрагмент информации о пришельце
alien_0
,
а именно — его цвет. Строка
'color'
является ключом в словаре; с этим ключом
связано значение
'green'
.
Обращение к значениям в словаре
Чтобы получить значение, связанное с ключом, укажите имя словаря, а затем ключ
в квадратных скобках:
alien_0 = {'color': 'green'}
print(alien_0['color'])
Эта конструкция возвращает значение, связанное с ключом
'color'
, из словаря
alien_0
:
green
Количество пар «ключ—значение» в словаре не ограничено. Например, вот как
выглядит исходный словарь
alien_0
с двумя парами «ключ—значение»:
alien_0 = {'color': 'green', 'points': 5}
Теперь программа может получить значение, связанное с любым из ключей
в
alien_0
:
color
или
points
. Если игрок сбивает корабль пришельца, для получения
заработанных им очков может использоваться код следующего вида:
alien_0 = {'color': 'green', 'points': 5}
new_points = alien_0['points']
print("You just earned " + str(new_points) + " points!")
Работа со словарями 103
После того как словарь будет определен, код извлекает значение, связанное
с ключом
'points'
, из словаря. Затем это значение сохраняется в переменной
new_points
. Строка преобразует целое значение в строку и выводит сообщение
с количеством заработанных очков:
You just earned 5 points!
Если этот код будет выполняться каждый раз, когда игрок сбивает очередного при-
шельца, программа будет получать правильное количество очков.
Добавление новых пар «ключ—значение»
Словари относятся к динамическим структурам данных: в словарь можно в любой
момент добавлять новые пары «ключ—значение». Для этого указывается имя сло-
варя, за которым в квадратных скобках следует новый ключ с новым значением.
Добавим в словарь
alien_0
еще два атрибута: координаты
x
и
y
для вывода изобра-
жения пришельца в определенной позиции экрана. Допустим, пришелец должен
отображаться у левого края экрана, в 25 пикселах от верхнего края. Так как система
экранных координат обычно располагается в левом верхнем углу, для размещения
пришельца у левого края координата
x
должна быть равна 0, а координата
y
— 25:
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
alien_0['x_position'] = 0
alien_0['y_position'] = 25
print(alien_0)
Программа начинается с определения того же словаря, с которым мы уже работали
ранее. После этого выводится «снимок» текущего состояния словаря. В точке
в словарь добавляется новая пара «ключ—значение»: ключ
'x_position'
и значе-
ние
0
. То же самое делается для ключа
'y_position'
в точке . При выводе изме-
ненного словаря мы видим две дополнительные пары «ключ—значение»:
{'color': 'green', 'points': 5}
{'color': 'green', 'points': 5, 'y_position': 25, 'x_position': 0}
Окончательная версия словаря содержит четыре пары «ключ—значение». Первые
две определяют цвет и количество очков, а другие две — координаты. Обратите
внимание: порядок пар «ключ—значение» не соответствует порядку их добавления.
Python не интересует, в каком порядке добавлялись пары; важна лишь связь между
каждым ключом и его значением.
Создание пустого словаря
В некоторых ситуациях бывает удобно (или даже необходимо) начать с пустого
словаря, а затем добавлять в него новые элементы. Чтобы начать заполнение пу-
стого словаря, определите словарь с пустой парой фигурных скобок, а затем добав-
ляйте новые пары «ключ—значение» (каждая пара в отдельной строке). Например,
вот как строится словарь alien_0:
104 Глава 6 • Словари
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
print(alien_0)
Программа определяет пустой словарь
alien_0
, после чего добавляет в него зна-
чения для цвета и количества очков. В результате создается словарь, который ис-
пользовался в предыдущих примерах:
{'color': 'green', 'points': 5}
Обычно пустые словари используются при хранении данных, введенных пользова-
телем, или при написании кода, автоматически генерирующего большое количество
пар «ключ—значение».
Изменение значений в словаре
Чтобы изменить значение в словаре, укажите имя словаря с ключом в квадратных
скобках, а затем новое значение, которое должно быть связано с этим ключом. До-
пустим, в процессе игры цвет пришельца меняется с зеленого на желтый:
alien_0 = {'color': 'green'}
print("The alien is " + alien_0['color'] + ".")
alien_0['color'] = 'yellow'
print("The alien is now " + alien_0['color'] + ".")
Сначала определяется словарь
alien_0
, который содержит только цвет пришельца;
затем значение, связанное с ключом
'color'
, меняется на
'yellow'
. Из выходных
данных видно, что цвет пришельца действительно сменился с зеленого на желтый:
The alien is green.
The alien is now yellow.
Рассмотрим более интересный пример: отслеживание позиции пришельца, который
может двигаться с разной скоростью. Мы сохраним значение, представляющее
текущую скорость пришельца, и используем его для определения величины гори-
зонтального смещения:
alien_0 = {'x_position': 0, 'y_position': 25, 'speed': 'medium'}
print("Original x-position: " + str(alien_0['x_position']))
# Пришелец перемещается вправо.
# Вычисляем величину смещения на основании текущей скорости.
if alien_0['speed'] == 'slow':
x_increment = 1
elif alien_0['speed'] == 'medium':
x_increment = 2
else:
# Пришелец двигается быстро.
x_increment = 3
# Новая позиция равна сумме старой позиции и приращения.
Работа со словарями 105
alien_0['x_position'] = alien_0['x_position'] + x_increment
print("New x-position: " + str(alien_0['x_position']))
Сначала определяется словарь с исходной позицией (координаты
x
и
y
) и ско-
ростью
'medium'
. Значения цвета и количества очков для простоты опущены, но
с ними этот пример работал бы точно так же. Также выводится исходное значение
x_position
.
В точке цепочка
if
-
elif
-
else
определяет, на какое расстояние пришелец должен
переместиться вправо; полученное значение сохраняется в переменной
x_increment
.
Если пришелец двигается медленно (
'slow'
), то он перемещается на одну единицу
вправо; при средней скорости (
'medium'
) он перемещается на две единицы вправо;
наконец, при высокой скорости (
'fast'
) он перемещается на три единицы вправо.
Вычисленное смещение прибавляется к значению
x_position
в , а результат со-
храняется в словаре с ключом
x_position
.
Для пришельца со средней скоростью позиция смещается на две единицы:
Original x-position: 0
New x-position: 2
Получается, что изменение одного значения в словаре изменяет все поведение при-
шельца. Например, чтобы превратить пришельца со средней скоростью в быстрого,
добавьте следующую строку:
alien_0['speed'] = fast
При следующем выполнении кода блок
if
-
elif
-
else
присвоит
x_increment
большее
значение.
Удаление пар «ключ—значение»
Когда информация, хранящаяся в словаре, перестает быть ненужной, пару «ключ—
значение» можно полностью удалить при помощи команды
del
. При вызове до-
статочно передать имя словаря и удаляемый ключ.
Например, в следующем примере из словаря
alien_0
удаляется ключ
'points'
вместе со значением:
alien_0 = {'color': 'green', 'points': 5}
print(alien_0)
del alien_0['points']
print(alien_0)
Строка приказывает Python удалить ключ
'points'
из словаря
alien_0
, а также
удалить значение, связанное с этим ключом. Из вывода видно, что ключ
'points'
и его значение 5 исчезли из словаря, но остальные данные остались без измене-
ний:
{'color': 'green', 'points': 5}
{'color': 'green'}
|