Menu
Русский

Словари в Python: создание, доступ, обновление и итерация по dict

Словари — это структура Python для поиска по ключу. Единственный тип данных, к которому ты будешь постоянно тянуться после основ.

Словарь — это таблица поиска

Списки индексируются позицией. Словари — ключом, обычно строкой или числом, и каждый ключ сопоставлен значению. Этот одинокий сдвиг открывает огромную категорию программ: инвентари, конфиги, JSON-пейлоады, профили пользователей, кэши.

main.py
Output
Click Run to see the output here.

Ключами и значениями может быть почти что угодно. Ключи должны быть хэшируемыми (значит: числа, строки, кортежи; не списки и не другие словари). Значения без ограничений — словарь может хранить что угодно, включая другие словари и списки.

Создание словарей

Несколько способов, у каждого своё место:

main.py
Output
Click Run to see the output here.

Чтение значений

Два способа, и выбор важен:

main.py
Output
Click Run to see the output here.

Выбирай по намерению:

  • [] — когда ключ обязан быть. Нет — это баг, и громкая ошибка тебе нужна.
  • .get() — когда «нет такого» — валидный случай. Позволяет задать значение по умолчанию без try/except.

Добавление, обновление, удаление

Присваивание по ключу создаёт либо обновляет:

main.py
Output
Click Run to see the output here.

update() объединяет с другим словарём или итерируемым парами:

main.py
Output
Click Run to see the output here.

Общие ключи из overrides перезаписывают те, что в settings.

Проверка ключа

in проверяет ключи, а не значения:

main.py
Output
Click Run to see the output here.

Чтобы проверить именно значение, используй user.values():

main.py
Output
Click Run to see the output here.

Как итерироваться по словарю

Тебе доступны три «вида», по которым можно крутить цикл:

main.py
Output
Click Run to see the output here.

.items() — то, за чем ты тянешься чаще всего: получаешь пару, уже распакованную, готовую к использованию.

Порядок итерации в современном Python (3.7+) совпадает с порядком вставки. Словарь — не «волшебный мешок»: добавишь a, потом b, потом c — итерация вернёт их в том же порядке. Это гарантия языка, на которую можно опираться.

Как отсортировать словарь

Словари сохраняют порядок вставки, так что «отсортировать» словарь на самом деле означает построить новый словарь с ключами, вставленными в нужном порядке:

main.py
Output
Click Run to see the output here.

sorted() возвращает список пар; обёртывание в dict(...) пересобирает словарь в новом порядке. Если нужны только отсортированные пары (а не словарь) — внешний dict() не пиши.

Как объединить два словаря

Python 3.9+ даёт оператор |:

main.py
Output
Click Run to see the output here.

При конфликте ключей побеждают значения из правого словаря. .update() — эквивалент на месте. На более старых версиях Python используй {**defaults, **overrides}.

Паттерн setdefault

Частая потребность: «если ключ есть — используй его значение; если нет — поставь значение по умолчанию и используй его».

main.py
Output
Click Run to see the output here.

Или, ещё лучше, используй collections.Counter:

main.py
Output
Click Run to see the output here.

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

Включения словарей

Параллель спискового включения, но для построения словарей:

main.py
Output
Click Run to see the output here.

Правила те же, что у списковых включений, но между фигурными — key: value.

Словарь — близнец JSON

Словари Python почти один в один ложатся на объекты JSON. Преобразование — один вызов:

main.py
Output
Click Run to see the output here.

Поэтому словари мелькают по всей веб-работе: твои запросы и ответы API — это по сути манипуляции словарями с сетью в середине.

Практический пример

Крошечная программа-конфиг, отслеживающая профиль пользователя:

main.py
Output
Click Run to see the output here.

Вложенные словари, изменяемые значения, .get() со значением по умолчанию — базовый набор для любых данных в виде записей.

Двигаемся дальше

Списки, кортежи, множества, словари. Имея эти четыре коллекции, можно смоделировать почти любые данные, с которыми столкнёшься поначалу. Дальше — списковое включение, компактный способ Python превращать одну коллекцию в другую.

Часто задаваемые вопросы

Что такое словарь в Python?

Словарь — это коллекция пар ключ-значение. Значение ищется по ключу: prices['apple'] вместо prices[0]. Словари быстро читаются и записываются, ключи должны быть уникальны, а в современном Python они сохраняют порядок вставки.

Как добавить ключ в словарь Python?

Просто присвой значение: my_dict['new_key'] = 'new value'. Если ключ уже есть, значение перезаписывается. Если нет — добавляется. Различия между «вставить» и «обновить» нет — синтаксис тот же.

В чём разница между dict[key] и dict.get(key)?

dict[key] поднимает KeyError, если ключа нет. dict.get(key) вместо этого возвращает None (или твоё значение по умолчанию). Используй .get(), когда отсутствие ключа — нормальная ситуация; [key] — когда отсутствие это баг.

Учитесь программировать с Coddy

НАЧАТЬ