⚖️ Старый vs Новый

⚡ Кратко: сравнение подходов

fromkeys() создаёт словарь с одинаковым значением для набора ключей.

Если передать fromkeys() изменяемый объект, все ключи будут ссылаться на один и тот же объект.

get() безопасно возвращает значение или default вместо KeyError.

setdefault() возвращает значение ключа, а если ключа нет - добавляет его.

keys(), values() и items() возвращают динамические view objects.

Вложенные словари позволяют хранить иерархичные данные.

copy() копирует словарь поверхностно, deepcopy() копирует вложенные объекты.

Dict comprehension создаёт словарь в одну читаемую конструкцию.

Топ-3 ошибки: использовать dict.fromkeys(keys, []) для независимых списков; ожидать, что list(dictionary.keys()) будет обновляться вместе со словарём; путать shallow copy и deep copy во вложенных структурах.

fromkeys() с изменяемым значением

В учебном примере показана ловушка общего списка.

Современная практика

Для независимых списков используйте comprehension: {key: [] for key in keys}.

Поиск обратного перевода циклом

Цикл по items() понятен новичку.

Современная практика

Если обратные запросы нужны часто, создайте отдельный reverse_dict один раз.

setdefault() везде

setdefault() удобно для группировки.

Современная практика

Для сложной логики часто читабельнее обычный if или collections.defaultdict.

Поверхностная копия

copy() полезен для плоских словарей.

Современная практика

Для вложенных структур используйте deepcopy() осознанно, учитывая стоимость копирования.

Проверить по документации: Современные замечания о стиле, производительности и поведении структур данных сверяйте с документацией Python версии, которую используете.