Python dict для быстрого поиска по ключу и значений по умолчанию
Python dict сопоставляет хешируемые ключи значениям для быстрого поиска по ключу.
Используйте его, когда у каждого элемента есть уникальный идентификатор и нужен быстрый доступ по ключу.
dict.get позволяет задать значение по умолчанию для отсутствующих ключей и сделать поиск безопасным.
Это делает dict удобным выбором для задач, основанных на ключах.
Пример Python Dict Для Поиска По Ключу
Вывод:
Результат появится здесь...
Вывод:
пользователь_2: Noah
пользователь_3: неизвестно
Как Работает Этот Пример
- Литерал dict создаёт отображение ID пользователя на имя; ключи должны быть хешируемыми, поэтому строки — безопасный выбор.
name_by_id["пользователь_2"]возвращает значение существующего ключа, но эта форма выбрасываетKeyError, если ключа нет.getвозвращает заданный дефолт, когда ключ отсутствует, что избегает исключения для опциональных ключей.
Частые Ошибки
Ошибка: использовать d[key], когда ключ опциональный.
Неправильно:
status = status_by_order[order_id]
Правильно:
status = status_by_order.get(order_id, "не найдено")
Почему это происходит: d[key] выбрасывает KeyError для отсутствующих ключей, а get возвращает значение по умолчанию.
Ошибка: использовать нехешируемый ключ, например список.
Неправильно:
bad_key = ["A101"]
status_by_order[bad_key] = "отправлено"
Правильно:
good_key = ("A101",)
status_by_order[good_key] = "отправлено"
Почему это происходит: ключи словаря должны быть хешируемыми, а списки — нет; кортежи работают, потому что хешируются, если их содержимое хешируемое.
Ошибка: считать, что 1, 1.0 и True — разные ключи.
Неправильно:
d = {1: "один", True: "булево"}
Правильно:
d = {1: "один", 2: "два"}
Почему это происходит: ключи, которые сравниваются как равные, указывают на один и тот же элемент словаря, поэтому более поздние присваивания перезаписывают ранние.
Python dict vs list: что выбрать
| Используйте dict, когда… | Используйте list, когда… |
|---|---|
| Нужно сопоставить ключ со значением и искать по ключу. | Нужна упорядоченная последовательность элементов или позиционный доступ. |
| Ключи — стабильные идентификаторы вроде ID, кодов или имён. | Позиция элемента — основной способ доступа. |
Правило: используйте dict для поиска по ключу и list для упорядоченного доступа по индексу.
Соображения По Производительности
Реализация dict в Python сильно оптимизирована и хорошо работает как универсальное отображение, поэтому это стандартный выбор для повторяющихся поисков по ключу.
Если нужен только упорядоченный доступ по индексу, list может быть проще, так как dict индексируется по ключам, а не по позициям.
При итерации по представлениям dict избегайте добавления или удаления записей во время обхода; мутация во время итерации может вызвать RuntimeError, поэтому при необходимости сначала копируйте ключи.
Больше Примеров
Объединить значения по умолчанию с переопределениями (Python 3.9+):
defaults = {"повторы": 2, "таймаут": 5}
overrides = {"таймаут": 10}
config = defaults | overrides
print(config)
| создаёт новый dict, и при пересечении ключей побеждает правый dict, что удобно для многослойных настроек.
Собрать dict из пар ключ/значение:
language_labels = [("en", "Hello"), ("ru", "Привет")]
labels_by_locale = dict(language_labels)
print(labels_by_locale)
dict() принимает итерируемый набор пар ключ/значение, что удобно, когда данные приходят в виде кортежей.
Когда использовать Python dict
- Нужно получать или обновлять значения по стабильному ключу, например ID, коду или имени.
- Нужен предсказуемый порядок итерации, совпадающий с порядком вставки.
- Нужны безопасные значения по умолчанию для отсутствующих ключей через
getили явные проверки. - Нужно объединять словари с понятными правилами приоритета.
- Не используйте dict, если нужен только позиционный доступ к упорядоченным элементам; list для этого проще.