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

Более детально рассматривать кортежи я не буду. При решении повседневных задач вы будете чаще использовать списки и словари. И это хороший повод перейти к следующей теме.

Словари

Словарь очень похож на список, но порядок элементов в нем не имеет значения, и они выбираются не с помощью смещения. Вместо этого для каждого значения вы указываете связанный с ним уникальный ключ. Таким ключом в основном служит строка, но он может быть объектом одного из неизменяемых типов: булевой переменной, целым числом, числом с плавающей точкой, кортежем, строкой и другими объектами, которые вы увидите далее. Словари можно изменять, что означает, что вы можете добавить, удалить и изменить их элементы, которые имеют вид «ключ — значение».

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

В других языках программирования словари могут называться ассоциативными массивами, хешами или хеш-таблицей. В Python словарь также называется dict для экономии места.

Создание словаря с помощью {}

Чтобы создать словарь, вам нужно обернуть в фигурные скобки ({}) разделенные запятыми пары ключ: значение. Самым простым словарем является пустой словарь, не содержащий ни ключей, ни значений:

>>> empty_dict = {}

>>> empty_dict

{}

Создадим небольшой словарь, включающий цитаты из «Словаря сатаны» Амброза Бирса:

>>> bierce = {

…·····"day": "A period of twenty-four hours, mostly misspent",

…·····"positive": "Mistaken at the top of one's voice",

…·····"misfortune": "The kind of fortune that never misses",

…·····}

>>>

Ввод имени словаря в интерактивный интерпретатор выведет все его ключи и значения:

>>> bierce

{'misfortune': 'The kind of fortune that never misses',

'positive': "Mistaken at the top of one's voice",

'day': 'A period of twenty-four hours, mostly misspent'}

В Python допускается наличие запятой после последнего элемента списка, кортежа или словаря. Вам также не обязательно использовать выделение пробелами, как я это сделал в предыдущем примере, когда вы вводите ключи и значения внутри фигурных скобок. Это лишь улучшает читабельность.

Преобразование с помощью функции dict()

Вы можете использовать функцию dict(), чтобы преобразовывать последовательности из двух значений в словари. (Вы иногда можете столкнуться с последовательностями «ключ — значение» вида «Стронций, 90, углерод, 14» или «Vikings, 20, Packers, 7».) Первый элемент каждой последовательности применяется как ключ, а второй — как значение.

Для начала рассмотрим небольшой пример, использующий lol (список, содержащий списки, которые состоят из двух элементов):

>>> lol = [['a', 'b'], ['c', 'd'], ['e', 'f']]

>>> dict(lol)

{'c': 'd', 'a': 'b', 'e': 'f'}

Помните, что порядок ключей в словаре может быть произвольным, он зависит от того, как вы добавляете элементы.

Мы могли бы использовать любую последовательность, содержащую последовательности, которые состоят из двух элементов. Рассмотрим остальные примеры.

Список, содержащий двухэлементные кортежи:

>>> lot = [('a', 'b'), ('c', 'd'), ('e', 'f')]

>>> dict(lot)

{'c': 'd', 'a': 'b', 'e': 'f'}

Кортеж, включающий двухэлементные списки:

>>> tol = (['a', 'b'], ['c', 'd'], ['e', 'f'])

>>> dict(tol)

{'c': 'd', 'a': 'b', 'e': 'f'}

Список, содержащий двухсимвольные строки:

>>> los = ['ab', 'cd', 'ef']

>>> dict(los)

{'c': 'd', 'a': 'b', 'e': 'f'}

Кортеж, содержащий двухсимвольные строки:

>>> tos = ('ab', 'cd', 'ef')

>>> dict(tos)

{'c': 'd', 'a': 'b', 'e': 'f'}

В подразделе «Итерирование по нескольким последовательностям с помощью функции zip()» раздела «Выполняем итерации с помощью for» главы 4 вы познакомитесь с функцией, которая называется zip(). Она позволит вам легко создавать такие двухэлементные последовательности.

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

Добавить элемент в словарь довольно легко. Нужно просто обратиться к элементу по его ключу и присвоить ему значение. Если ключ уже существует в словаре, имеющееся значение будет заменено новым. Если ключ новый, он и указанное значение будут добавлены в словарь. Здесь, в отличие от списков, вам не нужно волноваться о том, что Python сгенерирует исключение во время присваивания нового элемента, если вы укажете, что этот индекс находится вне существующего диапазона.