Merge Dictionaries¶
Zero-dependency Python snippets for merging multiple dictionaries using the standard library.
7 snippets available in this sub-category.
Simple¶
Merge with update()¶
dict
merge
update
inplace
data-structures
Merge two dicts in-place (right overwrites left)
Notes
- update() modifies the first dict
- Overwrites keys present in both
Merge with dict unpacking (Python 3.5+)¶
dict
merge
unpacking
new
data-structures
Merge two or more dicts into a new dict
d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
merged = {**d1, **d2}
print(merged) # {'a': 1, 'b': 3, 'c': 4}
Notes
- Later dicts overwrite earlier ones
- Works for any number of dicts: {**d1, **d2, **d3, ...}
Merge with | operator (Python 3.9+)¶
dict
merge
or
operator
data-structures
Merge dicts with | (returns new dict)
d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
merged = d1 | d2
print(merged) # {'a': 1, 'b': 3, 'c': 4}
Notes
- d1 | d2 returns a new dict
- d1 |= d2 updates in-place
Complex¶
Merge multiple dicts (reduce)¶
dict
merge
multiple
reduce
data-structures
Merge a list of dicts (rightmost wins)
from functools import reduce
dicts = [{"a": 1}, {"b": 2}, {"a": 3}]
merged = reduce(lambda a, b: {**a, **b}, dicts)
print(merged) # {'a': 3, 'b': 2}
Notes
- Useful for merging arbitrary number of dicts
Deep merge (recursive)¶
dict
merge
deep
recursive
data-structures
Recursively merge nested dictionaries
def deep_merge(d1, d2):
result = d1.copy()
for k, v in d2.items():
if k in result and isinstance(result[k], dict) and isinstance(v, dict):
result[k] = deep_merge(result[k], v)
else:
result[k] = v
return result
d1 = {"a": 1, "b": {"x": 10}}
d2 = {"b": {"y": 20}, "c": 3}
print(deep_merge(d1, d2)) # {'a': 1, 'b': {'x': 10, 'y': 20}, 'c': 3}
Notes
- Only merges nested dicts, not lists/sets
Conflict resolution (custom merge)¶
dict
merge
conflict
custom
data-structures
Merge dicts with custom conflict resolution
def merge_with_conflict(d1, d2, conflict):
result = d1.copy()
for k, v in d2.items():
if k in result:
result[k] = conflict(result[k], v)
else:
result[k] = v
return result
d1 = {"a": 1, "b": 2}
d2 = {"b": 3, "c": 4}
merged = merge_with_conflict(d1, d2, lambda x, y: x + y)
print(merged) # {'a': 1, 'b': 5, 'c': 4}
Notes
- conflict is a function: (old, new) -> result
Edge cases: empty dicts, overlapping keys¶
dict
merge
edge-case
data-structures
Handle edge cases for merging
Notes
- Merging with empty dict returns the other dict
🔗 Cross Reference¶
- Reference: See 📂 Invert Key-Value Pairs
🏷️ Tags¶
dict
, merge
, update
, unpacking
, or
, deep
, conflict
, edge-case
, data-structures
📝 Notes¶
- Use update(), unpacking, or | for shallow merges
- Use recursion for deep merges