Python Glossary English

все 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Сообщить о неточности