Словари и их методы в Python
, отредактировано
Что такое словарь
• Словарь в Python хранит данные в виде пар «ключ — значение» и позволяет быстро получать значение по ключу • Ключами могут быть только неизменяемые (хэшируемые) типы: строки, числа, кортежи • Основные методы: get(), update(), pop(), keys(), values(), items() • Итерация по словарю перебирает ключи; для пар используйте items()
Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». Словари входят в число основных типов данных Python. Вот пример словаря на Python:
Данный словарь использует строки в качестве ключей, однако ключом может являться в принципе любой неизменяемый тип данных. Значением же конкретного ключа может быть что угодно. Вот ещё один пример словаря, где ключами являются числа, а значениями — строки:
Важное уточнение: если вы попробуете использовать изменяемый тип данных в качестве ключа, то получите ошибку:
Прим. перев. На самом деле проблема не с изменяемыми, а с нехэшируемыми типами данных, но обычно это одно и то же.
Получение данных из словаря
Для получения значения конкретного ключа используются квадратные скобки []. Предположим, что в нашем словаре есть пара 'марафон': 26.
Опять же, вы получите ошибку, если попытаетесь получить значение по несуществующему ключу. Для избежания подобных ошибок существуют методы, о которых мы сейчас поговорим.
Добавление и обновление ключей
Добавление новых пар в словарь происходит достаточно просто:
Обновление существующих значений происходит абсолютно также:
Удаление ключей
Для удаления ключа и соответствующего значения из словаря можно использовать del
Методы
Словари в Python имеют множество различных полезных методов, которые помогут вам в работе с ними. Вот лишь некоторые из них:
Update
Метод update() пригодится, если нужно обновить несколько пар сразу. Метод принимает другой словарь в качестве аргумента.
Если вас интересует, почему данные в словаре расположены не в том порядке, в котором они были внесены в него, то это потому что словари не упорядочены.
Get
Метод get() возвращает значение по указанному ключу. Если указанного ключа не существует, метод вернёт None.
Метод можно использовать для проверки наличия ключей в словаре:
Также можно указать значение по умолчанию, которое будет возвращено вместо None, если ключа в словаре не окажется:
Pop
Метод pop() удаляет ключ и возвращает соответствующее ему значение.
Keys
Метод keys() возвращает коллекцию ключей в словаре.
Values
Метод values() возвращает коллекцию значений в словаре.
Items
Метод items() возвращает пары «ключ — значение».
Итерация через словарь
Вы можете провести итерацию по каждому ключу в словаре. Если вы только начинаете изучать Python, посмотрите дорожную карту разработчика.
Очевидно, вместо story_count можно использовать story_count.keys().
В примере кода ниже цикл for использует метод items() для получения пары «ключ — значение» на каждую итерацию.
Часто задаваемые вопросы
Чем словарь отличается от списка в Python?
Список хранит элементы по порядковому индексу (0, 1, 2...) и поддерживает сортировку, а словарь — по произвольному ключу. Поиск по ключу в словаре выполняется за O(1), тогда как поиск элемента в списке — за O(n). Словарь удобен, когда нужно быстро находить данные по уникальному идентификатору, а список — когда важен порядок элементов.
Можно ли использовать список как ключ словаря?
Нет. Ключом словаря может быть только хэшируемый (неизменяемый) объект: строка, число, кортеж. Список является изменяемым типом, поэтому при попытке использовать его как ключ Python выбросит TypeError. Если нужно использовать набор значений в качестве ключа, преобразуйте список в кортеж.
Как проверить, есть ли ключ в словаре?
Самый простой способ — оператор in: выражение 'ключ' in my_dict вернёт True или False. Другой вариант — метод get(), который возвращает None (или указанное значение по умолчанию), если ключа нет в словаре. Метод get() удобнее, когда нужно сразу получить значение с запасным вариантом.
Сохраняют ли словари порядок элементов?
Начиная с Python 3.7, словари гарантированно сохраняют порядок вставки элементов. В более ранних версиях порядок не гарантировался, и для упорядоченных пар использовали collections.OrderedDict. В современном Python обычный dict полностью заменяет OrderedDict для большинства задач.
О словаре и других типах данных Python можно почитать в нашей статье.