5 Ways to Merge Dictionaries in Python¶
Medium Link: https://medium.com/p/d4e9ce137374¶
d1 = {'India': 'Delhi',
'Canada': 'Ottawa',
'United States': 'Washington D. C.'}
d2 = {'France': 'Paris',
'Malaysia': 'Kuala Lumpur'}
print(d1)
print(d2)
{'India': 'Delhi', 'Canada': 'Ottawa', 'United States': 'Washington D. C.'}
{'France': 'Paris', 'Malaysia': 'Kuala Lumpur'}
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'}