⚖️ Старый подход и современная практика

⚡ Кратко: old-vs-new

fromkeys(), get(), setdefault(), keys(), values() и items() повторяются как базовый набор методов словаря.

View objects отражают изменения словаря, а list(view) создаёт снимок.

Вложенные структуры требуют цепочки ключей и индексов.

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

Dict comprehension подходит для преобразования и фильтрации словаря.

Функции повторяются через def, pass, return, *args/**kwargs и LEGB.

Практическая задача со скобками решается стеком и словарём соответствий.

global работает, но параметры и return обычно дают более предсказуемый код.

Топ-3 ошибки: менять словарь во время итерации по items(); ожидать независимых списков от dict.fromkeys(keys, []); путать локальную переменную и global.

Учебный/наивный подходСовременный вариантПочему так
Удалять ключи прямо в цикле for key, value in data.items().Итерироваться по list(data) или собрать новый словарь.Размер словаря нельзя менять во время активной итерации по view.
dict.fromkeys(keys, []) для независимых списков.{key: [] for key in keys}.fromkeys() положит одну и ту же ссылку на список во все ключи.
Решать проверку скобок цепочкой replace().Использовать стек и словарь пар.Стек явно моделирует порядок закрытия скобок.
Проверить по документации: рекомендации по стилю и стандартной библиотеке могут уточняться в новых версиях Python.