5 Ways to Merge Dictionaries in Python

The Crude Way

d3 = d1.copy()

for key, value in d2.items():
    d3[key] = value
    
print(d3)
{'India': 'Delhi', 'Canada': 'Ottawa', 'United States': 'Washington D. C.', 'France': 'Paris', 'Malaysia': 'Kuala Lumpur'}

Method 1: Using update method

d4 = d1.copy()

d4.update(d2)

print(d4)
{'India': 'Delhi', 'Canada': 'Ottawa', 'United States': 'Washington D. C.', 'France': 'Paris', 'Malaysia': 'Kuala Lumpur'}

Method 2: Using unpacking operator

d5 = {**d1, **d2}

print(d5)
{'India': 'Delhi', 'Canada': 'Ottawa', 'United States': 'Washington D. C.', 'France': 'Paris', 'Malaysia': 'Kuala Lumpur'}

Method 3: Using collections.ChainMap

from collections import ChainMap
d6 = ChainMap(d1, d2)
print(d6)
ChainMap({'India': 'Delhi', 'Canada': 'Ottawa', 'United States': 'Washington D. C.'}, {'France': 'Paris', 'Malaysia': 'Kuala Lumpur'})
d6['India']
'Delhi'
x = {'A': 1, 'B': 2}
y = {'B': 10, 'C': 20}
z = ChainMap(x, y)
z['B']
2

Method 4: Unpacking the second dictionary

d7 = dict(d1, **d2)
print(d7)
{'India': 'Delhi', 'Canada': 'Ottawa', 'United States': 'Washington D. C.', 'France': 'Paris', 'Malaysia': 'Kuala Lumpur'}

However, this method only works if the keys of the second dictionary are strings.

x = {1: 'A', 2: 'B'}
y = {3: 'C', 4: 'D'}

z = dict(x, **y)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-a717d48792bc> in <module>
      2 y = {3: 'C', 4: 'D'}
      3 
----> 4 z = dict(x, **y)

TypeError: keyword arguments must be strings

Method 5: Using the merge operator

This method works for Python 3.9+

d8 = d1 | d2
print(d8)
{'India': 'Delhi', 'Canada': 'Ottawa', 'United States': 'Washington D. C.', 'France': 'Paris', 'Malaysia': 'Kuala Lumpur'}