Skip to content
Home / Fundamentals

Merging dictionaries is a common operation in Python, especially when working with data stored in multiple sources. There are several ways to merge dictionaries in Python, and in this article, we'll take a look at some of the most efficient ways to do it using a single expression.

Method 1: Using the update() Method

The most straightforward way to merge two dictionaries is to use the update() method. This method updates the first dictionary with the key-value pairs of the second dictionary. Here's an example:

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

dict1.update(dict2)
print(dict1)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

As you can see, the update() method adds the key-value pairs of dict2 to dict1. The original dict1 is modified in place, so there's no need to assign the result to a new variable.

Method 2: Using the {**dict1, **dict2} Syntax

Another way to merge dictionaries in a single expression is to use the {**dict1, **dict2} syntax. This syntax is called the double-starred (or "unpacking") operator, and it allows you to unpack the key-value pairs of a dictionary into keyword arguments. Here's an example:

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

merged_dict = {**dict1, **dict2}
print(merged_dict)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

As you can see, the {**dict1, **dict2} syntax creates a new dictionary that contains the key-value pairs of both dict1 and dict2. Note that this syntax is only available in Python 3.5 and above.

Method 3: Using the ChainMap Class

Another way to merge dictionaries in Python is to use the ChainMap class from the collections module. This class allows you to create a single view of multiple dictionaries, as if they were a single dictionary. Here's an example:

from collections import ChainMap

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

merged_dict = ChainMap(dict1, dict2)
print(merged_dict)  # Output: ChainMap({'a': 1, 'b': 2}, {'c': 3, 'd': 4})
print(merged_dict.maps)  # Output: [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]

# You can access the key-value pairs of the merged dictionaries as if they were a single dictionary
print(merged_dict['a'])  # Output: 1
print(merged_dict['c'])  # Output: 3

Method 4: Using dict comprehension

Another way to merge dictionaries in a single expression is to use a dictionary comprehension and the items() method. This method returns a view of the dictionary's key-value pairs, which can be iterated over using a for loop. Here's an example:

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

merged_dict = {k: v for d in (dict1, dict2) for k, v in d.items()}
print(merged_dict)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

As you can see, the dictionary comprehension iterates over the key-value pairs of both dict1 and dict2, and creates a new dictionary with the merged key-value pairs.

Method 5: Using the dict(dict1, **dict2) Syntax

Another way to merge dictionaries in a single expression is to use the dict() constructor and the double-starred operator. This syntax allows you to pass the key-value pairs of a dictionary as keyword arguments to the dict() constructor. Here's an example:

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

merged_dict = dict(dict1, **dict2)
print(merged_dict)  # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}

As you can see, the dict() constructor creates a new dictionary with the key-value pairs of both dict1 and dict2. The double-starred operator unpacks the key-value pairs of dict2 into keyword arguments, which are passed to the dict() constructor.