Как добавить элемент в словарь в Python: полное руководство
Добавление элементов в словарь Python
Как добавить новый элемент в словарь с помощью простого присваивания?
my_dict = {'a': 1, 'b': 2}
my_dict['c'] = 3 # добавляется пара 'c': 3
print(my_dict) # {'a': 1, 'b': 2, 'c': 3}словарь слов python (словарь слов в python)
Присваивание по новому ключу создаёт элемент в словаре. Если ключ уже существует, значение будет перезаписано.
Типичная ситуация: случайная перезапись существующего ключа. Перед добавлением можно проверять наличие ключа оператором in, но это замедляет код. Метод setdefault() решает задачу безопаснее.
Как добавить несколько элементов или объединить словари?
d1 = {'x': 10}
d1.update({'y': 20, 'z': 30})
print(d1) # {'x': 10, 'y': 20, 'z': 30}
d2 = {'a': 1, 'b': 2}
d2.update([('c', 3), ('d', 4)])
print(d2) # {'a': 1, 'b': 2, 'c': 3, 'd': 4}Python значение ключа словаря (значение ключа словаря в python)
Метод update() принимает другой словарь, итерируемый объект из пар ключ-значение или ключевые аргументы. Существующие ключи перезаписываются.
Если передать неподходящий объект (например, список чисел), возникнет TypeError. Также важно помнить, что update() не возвращает новый словарь, а изменяет исходный.
Как добавить элемент только если ключ отсутствует?
grades = {'Иван': 85}
grades.setdefault('Мария', 90)
grades.setdefault('Иван', 100) # Иван уже есть, значение не изменится
print(grades) # {'Иван': 85, 'Мария': 90}
ключ значение в python (пары ключ-значение в python)
setdefault(key, default) возвращает значение по ключу, если оно существует. Если ключа нет, вставляет default и возвращает его. Отлично подходит для инициализации вложенных структур, когда нужно добавить элемент только при первом обращении.
Ошибка: передача изменяемого объекта в качестве default (например, пустого списка) приводит к тому, что этот список будет общим для всех вызовов, если его потом изменять. setdefault не создаёт копию.
Как автоматически создавать значение по умолчанию при первом обращении к ключу?
from collections import defaultdict
dd = defaultdict(int)
dd['a'] += 1 # сначала создаётся 0, потом прибавляется 1
print(dd) # defaultdict(<class 'int'>, {'a': 1})
dd2 = defaultdict(list)
dd2['fruits'].append('яблоко')
print(dd2) # defaultdict(<class 'list'>, {'fruits': ['яблоко']})получить значение ключа python (получение значения ключа в python)
Объект defaultdict принимает фабрику (функцию без аргументов), которая возвращает значение по умолчанию для отсутствующего ключа. Это удобно для группировки данных, подсчёта частоты и т.д.
Фабрика не может принимать аргументы. Если нужна разная логика при создании, используйте __missing__ или обычный словарь с setdefault. Также defaultdict не выбрасывает KeyError при обращении к несуществующему ключу – это может маскировать ошибки.
Как объединить словари с помощью операторов | и |= (Python 3.9+)?
base = {'one': 1, 'two': 2}
extra = {'three': 3, 'one': 100}
merged = base | extra # создаётся новый словарь
print(merged) # {'one': 100, 'two': 2, 'three': 3}
base |= {'four': 4} # обновление на месте
print(base) # {'one': 1, 'two': 2, 'four': 4}
Оператор | возвращает новый словарь, объединяя два (правый перезаписывает левый). |= изменяет исходный словарь. Это короткая и читаемая альтернатива update().
Работает только начиная с Python 3.9. Для более старых версий используйте update() или {**d1, **d2}. Передача несовместимых типов (например, числа) вызовет TypeError.
Расширенные примеры добавления элементов в словарь.
Вложенные словари и безопасное добавление
data = {}
# Добавление элемента во вложенный словарь
if 'user' not in data:
data['user'] = {}
data['user']['name'] = 'Анна'
# Упрощаем с помощью defaultdict
from collections import defaultdict
data = defaultdict(dict)
data['user']['name'] = 'Анна' # автоматически создаётся пустой dict
print(data['user']) # {'name': 'Анна'}
{'name': 'Анна'}
Добавление из списка кортежей с преобразованием
pairs = [('a', 1), ('b', 2), ('a', 3)]
result = {}
for key, val in pairs:
result.setdefault(key, []).append(val)
print(result) # {'a': [1, 3], 'b': [2]}
{'a': [1, 3], 'b': [2]}
Массовое добавление с проверкой уникальности ключей
keys = ['x', 'y', 'z']
values = [10, 20, 30]
new_dict = {}
for k, v in zip(keys, values):
if k in new_dict:
raise ValueError(f"Повторяющийся ключ {k}")
new_dict[k] = v
print(new_dict) # {'x': 10, 'y': 20, 'z': 30}
{'x': 10, 'y': 20, 'z': 30}
Использование dict.fromkeys для инициализации
# Создаём словарь с ключами из списка и одинаковым значением
keys = ['a', 'b', 'c']
result = dict.fromkeys(keys, 0)
print(result) # {'a': 0, 'b': 0, 'c': 0}
# Внимание: если значение изменяемое (например, []), все ключи укажут на один объект
wrong = dict.fromkeys(keys, [])
wrong['a'].append(1)
print(wrong) # {'a': [1], 'b': [1], 'c': [1]} - неожиданное поведение
{'a': 0, 'b': 0, 'c': 0}
{'a': [1], 'b': [1], 'c': [1]}
Объединение словарей с пользовательской логикой (collections.ChainMap)
from collections import ChainMap
base = {'color': 'red', 'size': 'M'}
extra = {'color': 'blue', 'price': 100}
# ChainMap не добавляет элементы, а создаёт цепочку поиска
cm = ChainMap(base, extra)
# При обращении к ключу ищет слева направо
print(cm['color']) # 'red' (из первого словаря)
# Чтобы реально добавить, придётся изменить один из словарей
base['material'] = 'cotton'
print(cm['material']) # 'cotton'
red
cotton