Об'єднання / злиття словників

Стисло:

dict = {**dict1, **dict2}

dict1.update(dict2)

# Python 3.9 +
dict = dict1 | dict2

Оператор **

Выражение {**dict1, **dict2} создает новый словарь с объединенными ключами и значениями из dict1 и dict2, которые оба должны быть словарями.

Значения ключей словаря dict2 имеют приоритет, когда dict1 и dict2 используют одинаковые ключи key.

Важно понимать отличие операции объединения/слияния словарей от операции обновления/дополнения. Отличие заключается в том, что в результате операции объединения/слияния {**dict1, **dict2} образуется новый словарь (исходные словари не изменяются), а при операции обновления/дополнения изменяется исходный словарь dict.

Примеры объединение двух словарей в один словарь:

>>> x = {"key1": "value1 from x", "key2": "value2 from x"}
>>> y = {"key2": "value2 from y", "key3": "value3 from y"}

>>> {**x, **y}
# {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> {**y, **x}
# {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

# Новое в Python 3.9
>>> x | y
# {'key1': 'value1 from x', 'key2': 'value2 from y', 'key3': 'value3 from y'}
>>> y | x
# {'key2': 'value2 from x', 'key3': 'value3 from y', 'key1': 'value1 from x'}

dict.update()

dict1 = {
    "id": 1,
    "name": "Ashutosh",
    "books": ["Python", "DSA"]
}
dict2 = {
   "college": "NSEC",
    "city": "Kolkata",
    "country": "India"
}
dict1.update(dict2)
dict1
# {'id': 1, 'name': 'Ashutosh', 'books': ['Python', 'DSA'],
#  'college': 'NSEC', 'city': 'Kolkata', 'country': 'India'}

Але з використанням методу update() пов'язана одна проблема. Цей метод змінює один із словників. Якщо хочемо створити третій словник без зміни вихідних, ми можемо використовувати цей метод.

Крім того, ми можемо використовувати цей метод лише для об'єднання двох словників за один раз. Якщо ми захочемо поєднати три словники, то нам спочатку доведеться об'єднати перші два, а потім додати третій до зміненого словника.

Оператор |

Починаючи з Python 3.9 ми можемо використовувати оператор | для поєднання двох або більше словників. Це виглядає так:

dict1 = {
    "id": 1,
    "name": "Ashutosh",
}
dict2 = {
    "books": ["Python", "DSA"],
    "college": "NSEC",
}
dict3 = {
    "city": "Kolkata",
    "country": "India"
}
merged_dict = dict1 | dict2 | dict3
merged_dict
# {'id': 1, 'name': 'Ashutosh', 'books': ['Python', 'DSA'],
#  'college': 'NSEC','city': 'Kolkata', 'country': 'India'}

Last updated