> For the complete documentation index, see [llms.txt](https://olexsyn.gitbook.io/enote/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://olexsyn.gitbook.io/enote/progr/python/dict/obyednannya-zlittya-slovnikiv.md).

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

## Стисл&#x43E;**:**

```python
dict = {**dict1, **dict2}

dict1.update(dict2)

# Python 3.9 +
dict = dict1 | dict2
```

## Оператор \*\*

[Выражение `{**dict1, **dict2}`](https://docs-python.ru/tutorial/operatsii-slovarjami-dict-python/obedinenie-dvuh-slovarej-novyj-slovar/) создает **новый словарь** с объединенными ключами и значениями из `dict1` и `dict2`, которые оба должны быть [словарями](https://docs-python.ru/tutorial/osnovnye-vstroennye-tipy-python/tip-dannyh-dict-slovar/).

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

Важно понимать отличие операции [**объединения/слияния словарей**](https://docs-python.ru/tutorial/operatsii-slovarjami-dict-python/obedinenie-dvuh-slovarej-novyj-slovar/) от операции [обновления/дополнения](https://docs-python.ru/tutorial/operatsii-slovarjami-dict-python/metod-dict-update/). Отличие заключается в том, что в результате операции объединения/слияния `{**dict1, **dict2}` образуется новый словарь (исходные словари не изменяются), а при операции обновления/дополнения изменяется исходный словарь `dict`.

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

```python
>>> 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()

```python
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 ми можемо використовувати оператор | для поєднання двох або більше словників. Це виглядає так:

```python
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'}
```
