все Python 3Словари (dict)понятие
Объединение словарей
операторы
update() изменяет словарь на месте. ** распаковка создаёт новый словарь. | (Python 3.9+) — оператор слияния.
Синтаксис
d1.update(d2) | {**d1, **d2} | d1 | d2
update() ничего не возвращает, и попытка написать d = d1.update(d2) кладёт в d значение None — самая частая ошибка на этом месте. Выбор способа сводится к одному вопросу: нужен ли исходный словарь дальше в неизменном виде. Во всех трёх вариантах значения переносятся по ссылке: вложенные списки и словари остаются общими с исходниками.
Примеры
# Python 3.9+
d1 = {'a': 1, 'b': 2}
d2 = {'b': 20, 'c': 3}
d1.update(d2)
print(d1)
# → {'a': 1, 'b': 20, 'c': 3}
d3 = {'a': 1, 'b': 2}
merged = {**d3, **d2}
print(merged)
# → {'a': 1, 'b': 20, 'c': 3}
d4 = d3 | d2
print(d4)
# → {'a': 1, 'b': 20, 'c': 3} (Python 3.9+)
extra = {'x': 9}
combined = {**d3, **d2, **extra}
print(combined)
# → {'a': 1, 'b': 20, 'c': 3, 'x': 9}
print(d3)
# → {'a': 1, 'b': 2} (** не изменяет оригинал)
# Python 3.9+
d5 = {'a': 1}
d5 |= {'b': 2, 'a': 99}
print(d5)
# → {'a': 99, 'b': 2}
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности