Выбрать главу

>>> pythons = {'Chapman': 'Graham', 'Cleese': 'John',

'Jones': 'Terry', 'Palin': 'Michael'}

Теперь проверим, кого мы добавили:

>>> 'Chapman' in pythons

True

>>> 'Palin' in pythons

True

Вспомнили ли мы о Терри Гиллиаме на этот раз?

>>> 'Gilliam' in pythons

False

Черт.

Получение элемента словаря с помощью конструкции [ключ]

Этот вариант использования словаря — самый распространенный. Вы указываете словарь и ключ, чтобы получить соответствующее значение:

>>> pythons['Cleese']

'John'

Если ключа в словаре нет, будет сгенерировано исключение:

>>> pythons['Marx']

Traceback (most recent call last):

··File "<stdin>", line 1, in <module>

KeyError: 'Marx'

Есть два хороших способа избежать возникновения этого исключения. Первый из них — проверить, имеется ли заданный ключ, с помощью ключевого слова in, что вы уже видели в предыдущем разделе:

>>> 'Marx' in pythons

False

Второй способ — использовать специальную функцию словаря get(). Вы указываете словарь, ключ и опциональное значение. Если ключ существует, вы получите связанное с ним значение:

>>> pythons.get('Cleese')

'John'

Если такого ключа нет, получите опциональное значение, если указывали его:

>>> pythons.get('Marx', 'Not a Python')

'Not a Python'

В противном случае будет возвращен объект None (интерактивный интерпретатор не выведет ничего):

>>> pythons.get('Marx')

>>>

Получение всех ключей с помощью функции keys()

Вы можете использовать функцию keys(), чтобы получить все ключи словаря. Для следующих примеров мы берем другой словарь:

>>> signals = {'green': 'go', 'yellow': 'go faster', 'red': 'smile for the camera'}

>>> signals.keys()

dict_keys(['green', 'red', 'yellow'])

В Python 2 функция keys() возвращает простой список. В Python 3 эта функция возвращает dict_keys() — итерабельное представление ключей. Это удобно для крупных словарей, поскольку не требует времени и памяти для создания и сохранения списка, которым вы, возможно, даже не воспользуетесь. Но зачастую вам нужен именно список. В Python 3 надо вызвать функцию list(), чтобы преобразовать dict_keys в список:

>>> list(signals.keys())

['green', 'red', 'yellow']

В Python 3 вам также понадобится использовать функцию list(), чтобы преобразовать результат работы функций values() и items() в обычные списки. Я пользуюсь этой функцией в своих примерах.

Получение всех значений с помощью функции values()

Чтобы получить все значения словаря, используйте функцию values():

>>> list(signals.values())

['go', 'smile for the camera', 'go faster']

Получение всех пар «ключ — значение» с помощью функции items()

Когда вам нужно получить все пары «ключ — значение» из словаря, используйте функцию items():

>>> list(signals.items())

[('green', 'go'), ('red', 'smile for the camera'), ('yellow', 'go faster')]

Каждая пара будет возвращена как кортеж вроде ('green', 'go').

Присваиваем значения с помощью оператора =, копируем их с помощью функции copy()

Как и в случае со списками, если вам нужно внести в словарь изменение, оно отразится для всех имен, которые ссылаются на него.

>>> signals = {'green': 'go', 'yellow': 'go faster', 'red': 'smile for the camera'}

>>> save_signals = signals

>>> signals['blue'] = 'confuse everyone'

>>> save_signals

{'blue': 'confuse everyone', 'green': 'go',

'red': 'smile for the camera', 'yellow': 'go faster'}

Чтобы скопировать ключи и значения из одного словаря в другой и избежать этого, вы можете воспользоваться функцией copy():

>>> signals = {'green': 'go', 'yellow': 'go faster', 'red': 'smile for the camera'}

>>> original_signals = signals.copy()

>>> signals['blue'] = 'confuse everyone'

>>> signals

{'blue': 'confuse everyone', 'green': 'go',

'red': 'smile for the camera', 'yellow': 'go faster'}

>>> original_signals

{'green': 'go', 'red': 'smile for the camera', 'yellow': 'go faster'}

Множества

Множество похоже на словарь, значения которого опущены. Он имеет только ключи. Как и в случае со словарем, ключи должны быть уникальны. Если вам нужно прикрепить к ключу некую информацию, воспользуйтесь словарем.

Раньше кое-где теорию множеств преподавали в начальной школе наряду с основами математики. Если в вашей школе такого не было (или было, но вы в это время смотрели в окно, как и я), на рис. 3.1 можете увидеть объединения и пересечения множеств.