Skip to main content

How to Merge Two or More Dictionaries in Python

How to Merge Two or More Dictionaries in Python

How to Merge Two or More Dictionaries in Python

Merging dictionaries is a common task when combining data from different sources or updating configuration settings. Python provides multiple ways to merge two or more dictionaries, from the traditional update() method to more modern techniques like dictionary unpacking and the collections.ChainMap. This guide covers these methods with clear examples to help you write clean, efficient Python code.


Why Merge Dictionaries?

  • Combining Data: Efficiently consolidate information from multiple dictionaries.
  • Updating Configurations: Overlay or augment settings through merging.
  • Maintainability: Keep data modular by merging when needed.
  • Handling Defaults: Merge default values with user input or overrides.

Syntax & Structure

The basic idea behind merging dictionaries is to produce a new dictionary or update an existing one such that all key-value pairs from one or more dictionaries are present. When duplicate keys exist, the rightmost dictionary’s value is used.


Using update() Method

update() modifies a dictionary in place by adding key-value pairs from another.

Example:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

dict1.update(dict2)
print(dict1)

Output

{'a': 1, 'b': 3, 'c': 4}

Note: dict1 is changed and contains merged data.


Merging with Dictionary Unpacking

Introduced in Python 3.5+, dictionary unpacking creates a new dictionary from multiple sources.

Example:

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

merged = {**dict1, **dict2}
print(merged)

Output

{'a': 1, 'b': 3, 'c': 4}

This method does not modify original dictionaries and can merge many dictionaries at once:

dict3 = {'d': 5}
merged_all = {**dict1, **dict2, **dict3}
print(merged_all)

Using collections.ChainMap

ChainMap groups multiple dictionaries into a single view without merging data physically. It searches each dictionary in order for keys.

Example:

from collections import ChainMap

dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}

merged_view = ChainMap(dict2, dict1)
print(merged_view['b'])  # Output: 3 (from dict2)
print(merged_view['a'])  # Output: 1 (from dict1)

Note: ChainMap does not create a new dictionary. Changes to original dicts reflect in the view.


Comparison Table: Dictionary Merging Methods

Method Example Modifies Original? Best For
update()
dict1.update(dict2)
Yes (dict1 updated) When in-place update is needed
Dictionary unpacking
{**dict1, **dict2}
No (creates new dict) Creating new merged dictionary; merging many dicts
collections.ChainMap
ChainMap(dict2, dict1)
No (views dicts) Non-destructive combined view without copying

Useful Tips

  • Order matters: In all methods, the last dictionary’s keys overwrite previous ones on duplicates.
  • Python 3.9+: You can also use the union operator |, e.g., merged = dict1 | dict2.
  • For deep merges: These methods do shallow merges only. For nested dictionaries, consider recursive merging techniques or third-party libraries.
  • ChainMap is read-only: Modifying the ChainMap affects only the first dictionary.
  • Use copy() if needed to avoid modifying originals when using update().

Conclusion

Merging dictionaries in Python is straightforward with multiple available methods depending on your needs. Use update() if you want to modify a dictionary in place, dictionary unpacking {**d1, **d2} to merge into a new dictionary, or ChainMap for a non-destructive, dynamic view. Each approach has its context and benefits, helping you write clean and effective Python code when combining dictionary data.

Comments