Что такое словари в Python и для чего они используются?
Что проверяют
Знаете ли вы, что за удобным синтаксисом стоит хеш-таблица, и делаете ли из этого правильные выводы: какие объекты годятся в ключи, почему поиск не зависит от размера и что будет при изменении словаря во время обхода.
Как отвечать
Словарь это отображение ключей в значения поверх хеш-таблицы. Поиск, вставка и удаление в среднем за постоянное время независимо от количества элементов, потому что позиция вычисляется из хеша ключа.
Требование к ключу одно: он должен быть хешируемым, то есть иметь хеш и не менять его в течение жизни. Строки, числа, кортежи из хешируемых элементов подходят, списки и множества нет. Значения любые.
Важная деталь: в современных версиях Python порядок вставки сохраняется, и это гарантия языка, а не деталь реализации. Формулировка про неупорядоченную коллекцию устарела.
counts = {}
for word in words:
counts[word] = counts.get(word, 0) + 1
config = {**defaults, **overrides}Назовите рабочий набор: get и setdefault вместо проверки наличия, pop с умолчанием, распаковка при слиянии, генераторы словарей, представления keys, values, items, которые не копируют данные, а отражают текущее состояние. Из стандартной библиотеки defaultdict и Counter.
Применяют словари для индексов и группировок, кэшей, конфигурации, разобранного JSON, подсчёта частот.
Где спотыкаются
Обращаются по ключу, которого может не быть, и получают KeyError вместо значения по умолчанию. Для необязательных данных есть get, для накопления setdefault и defaultdict.
Берут ключом изменяемый объект или кортеж со списком внутри. Тут ошибка видна сразу, хуже другой случай: свой класс с хешем по изменяемому полю. Поле поменяли, и запись перестала находиться, хотя формально лежит в словаре.
Меняют словарь во время обхода и ловят исключение о смене размера. Изменения собирают отдельно либо обходят копию ключей через list(d). Сюда же ошибка с dict.fromkeys(keys, []): список создаётся один и становится общим для всех ключей.