Обновление словаря в Python: добавление элементов в список
Быстрый ответ
Чтобы добавить элемент в список, являющийся значением ключа в словаре, воспользуйтесь методом setdefault для новых ключей и .append() для уже существующих:
my_dict = {}
my_dict.setdefault('my_key', []).append('my_value')
Метод setdefault проверит, существует ли ключ my_key в словаре. Если такого ключа нет, он создаст его со значением в виде пустого списка. Затем значение my_value будет добавлено в этот список.

Продвинутые манипуляции со словарями
Выбирая метод для работы со словарями, учитывайте возможности конкретного метода, а также версию Python, которую вы используете.
Вариант 1: Использование collections.defaultdict
collections.defaultdict — это специализированный словарь, который автоматически инициализирует новые ключи значениями по умолчанию:
from collections import defaultdict
my_defaultdict = defaultdict(list)
my_defaultdict['my_key'].append('my_value') # Ключ автоматически создается, если его ранее не было.
Вариант 2: Использование блока try/except
EAFP – это специфическая идеома программирования на Python, означающая: "Проще просить прощения, чем получать разрешение". Пользуясь этим принципом, вы можете использовать блок try/except для обработки ситуации, когда ключ отсутствует:
try:
my_dict['my_key'].append('my_value') # Пытаемся обратиться к ключу.
except KeyError:
my_dict['my_key'] = ['my_value'] # Если ключа не существует, создаем его.
Вариант 3: Метод .get()
Ещё один вариант — использовать метод .get(), для работы со значением по указанному ключу, сразу указав значение по умолчанию:
my_list = my_dict.get('my_key', [])
my_list.append('my_value')
my_dict['my_key'] = my_list # Обновляем значение по ключу в словаре.
Выбор оптимального метода работы со словарем
При выборе между setdefault, defaultdict и get следует учесть такие аспекты, как производительность и понятность вашего кода.
Вопросы производительности
setdefault может негативно сказываться на производительности, если требуется обрабатывать большие объемы данных. В таких случаях рекомендуется использовать defaultdict.
Читаемость и простота кода
defaultdict обычно считается более предпочтительным с точки зрения читаемости кода, поскольку он делает ненужной проверку существования ключей, делая код более чистым.
Совместимость с версиями Python
Учтите вашу текущую версию Python, так как defaultdict доступен начиная с версии 2.5.
Нюансы работы со словарями
Работая со словарями, помните о следующих нюансах:
1. Берегитесь повторяющихся ссылок
Использование setdefault может привести к созданию идентичных ссылок для разных ключей, если в качестве значения используется изменяемый объект, например, список.
2. Учитывайте последствия своих изменений
Добавляя элемент с помощью метода .append(), вы меняете список, на который ссылается ваш словарь. Убедитесь, что это изменение не нарушает логику вашей программы.
3. Выбирайте подходящий метод для работы с ключами
Выбор между setdefault и defaultdict должен основываться на предпочитаемом стиле кодирования и требованиях к производительности вашей программы.
Визуализация
Можно представить словарь в Python как дом (🏠), где каждая комната – это ключ:
Комнате можно:
- Построить новую пристройку (🏗️), если она ранее не существовала.
- Добавить новую мебель (🧸🛋️), если комната уже есть.
my_home = {}
# Строим комнату с мишкой (🧸)
my_home.setdefault('toys', []).append('🧸') # Все любят мягкие игрушки!
# Добавляем поезд (🚂) в уже существующую комнату
my_home['toys'].append('🚂') # Теперь игрушек стало больше.
Теперь вы можете визуализировать свой дом так:
До: 🏠
После: 🏠 с игровой комнатой, где есть [🧸, 🚂] # Игрушек стало больше, и поиграть стало интереснее!


