Python Merge Dictionaries (8 Ways to Merge Two Dicts)

Merge Two Dictioneries in Python

Table of Contents

Table of Contents


What are Dictionaries in Python?

Dictionaries in Python are a type of mutable, unordered collection that allows users to store data in a key-value pair format. They are defined using curly braces {} and a colon is used to separate the key from its corresponding value.

A dictionary in Python is similar to a real-life dictionary. In a real-life dictionary, you have words (keys) and their interpretations or meanings (values). Similarly, in a Python dictionary, you have keys and values.

Characteristics of Python Dictionaries

Mutable Nature

Dictionaries are mutable. This means that after defining a dictionary, you can change its content without creating a new dictionary.

					# Define a dictionary
colors = {"sky": "blue", "grass": "green"}

# Modify its content
colors["sky"] = "gray"

# The dictionary now has changed content

					{'sky': 'gray', 'grass': 'green'}


Unordered Collection

Dictionaries are unordered. This means that the items in a dictionary do not have a specific order. However, from Python 3.7 onwards, dictionaries maintain the order of items as they are inserted, but it’s not a guaranteed behavior.

Key-Value Pair Structure

Each item in a dictionary is a pair of a key and its corresponding value. Keys are unique, ensuring that each key has only one associated value.

					# Dictionary of fruits and their colors
fruits = {
    "apple": "red",
    "banana": "yellow",
    "grape": "purple"


Accessing Dictionary Items

To access a value in a dictionary, you use its corresponding key.

					print(fruits["apple"])  # Outputs: red


However, if you try to access a key that doesn’t exist, you’ll get an error. To prevent this, you can use the get() method.

					print(fruits.get("mango", "Not Found"))  # Outputs: Not Found


Adding and Removing Items

You can add a new key-value pair to a dictionary or remove an existing one.

					# Adding a new item
fruits["orange"] = "orange"

# Removing an item
del fruits["banana"]


Dictionaries in Python are versatile and powerful, allowing for efficient data storage and retrieval. They are fundamental in various applications, from data processing to web development.

Why Merge Dictionaries?

1. Data Aggregation

When you’re gathering data from multiple sources, each source might provide a piece of the overall data in the form of a dictionary. Merging these dictionaries allows you to have a consolidated view of the data.


Suppose you’re collecting user data from two different systems. One system provides basic user details, and the other provides the user’s preferences.

					user_details = {"name": "Alice", "age": 28}
user_preferences = {"color": "blue", "hobby": "reading"}

# Merging the dictionaries
user_data = {**user_details, **user_preferences}

					{'name': 'Alice', 'age': 28, 'color': 'blue', 'hobby': 'reading'}


2. Configuration Management

In software development, it’s common to have default configurations that can be overridden by user-specific or environment-specific settings. Merging dictionaries allows you to combine the default settings with the overrides.


Suppose you have a default configuration for an application and a set of user-specific settings that need to override the defaults.

					default_config = {"theme": "light", "notifications": True, "language": "English"}
user_config = {"theme": "dark", "language": "Spanish"}

# Merging the configurations
active_config = {**default_config, **user_config}

					{'theme': 'dark', 'notifications': True, 'language': 'Spanish'}


3. Data Update and Modification

Merging dictionaries can be used to update or modify existing data. If you have an existing dictionary and receive updates in the form of another dictionary, merging them will give you the updated data.


Suppose you have a product’s details, and you receive an update for its price and availability.

					product_details = {"name": "Laptop", "price": 1000, "in_stock": True}
product_update = {"price": 950, "in_stock": False}

# Merging the product details with the update
updated_product = {**product_details, **product_update}

					{'name': 'Laptop', 'price': 950, 'in_stock': False}


4. Extending Functionality

In object-oriented programming, when extending or inheriting properties from a base class to a derived class, merging dictionaries can be used to combine or override properties and methods.


Suppose you have a base class with certain properties and a derived class with additional properties. Merging dictionaries can help combine these properties.

					base_properties = {"color": "red", "size": "medium"}
derived_properties = {"shape": "circle", "color": "blue"}

# Merging the properties
combined_properties = {**base_properties, **derived_properties}

					{'color': 'blue', 'size': 'medium', 'shape': 'circle'}


Merging dictionaries in Python is a versatile operation that caters to various needs, from data aggregation to configuration management. It provides an efficient way to combine, update, or override data, making it a valuable tool in a developer’s toolkit.


Common Use Cases for Merging Dictionaries

1. Configuration Management

  • Scenario: In software applications, there are often default configurations that dictate how the application behaves. However, users or administrators might want to override these defaults with their own settings.

  • Example: Consider a web application with default settings for its appearance and behavior. A user might want to customize the theme, language, or other features.

					default_settings = {
    "theme": "light",
    "language": "English",
    "notifications": True

user_custom_settings = {
    "theme": "dark",
    "notifications": False

active_settings = {**default_settings, **user_custom_settings}

  • In this example, the user’s preference for the theme and notifications will override the default settings, resulting in a personalized experience.

2. Data Aggregation

  • Scenario: When collecting data from multiple sources, each source might provide a subset of the overall data. Merging dictionaries can help consolidate this data into a unified structure.

  • Example: Imagine gathering user data from different systems, where one system provides personal details and another provides user activity.

					user_profile = {
    "name": "Alice",
    "email": ""

user_activity = {
    "last_login": "2023-01-15",
    "purchases": ["book", "pen"]

aggregated_data = {**user_profile, **user_activity}


By merging these dictionaries, you get a comprehensive view of the user’s profile and activity.

3. Updating Records

  • Scenario: In scenarios like database operations, you might have an existing record and receive updates for certain fields. Merging dictionaries allows you to update the record efficiently.

  • Example: Consider a product inventory system where product details are stored, and periodic updates are received for stock and price.

					product_details = {
    "name": "Laptop",
    "price": 1000,
    "stock": 10

update_details = {
    "price": 950,
    "stock": 8

updated_product = {**product_details, **update_details}


Here, the product’s price and stock are updated based on the new information.

4. Extending or Overriding Properties

  • Scenario: In object-oriented programming, when creating derived classes, properties from the base class can be extended or overridden in the derived class using dictionary merging.

  • Example: Consider a base class representing a vehicle and a derived class representing a specific type of vehicle, like a car, with additional properties.

					vehicle_properties = {
    "wheels": 4,
    "fuel": "diesel"

car_properties = {
    "make": "Toyota",
    "model": "Camry",
    "fuel": "petrol"

combined_properties = {**vehicle_properties, **car_properties}


The car’s properties now include the base properties from the vehicle, with some properties overridden (like fuel) and some added (like make and model).

Merging dictionaries in Python serves a wide range of purposes, from configuration management to data aggregation. Understanding these use cases can help developers utilize dictionaries more effectively in their applications, ensuring efficient data handling and manipulation.


Python Basics

Before diving into advanced operations like merging dictionaries, it’s essential to have a solid grasp of Python’s basic concepts.


Understand how to declare and use variables. Variables in Python can store data of various types like numbers, strings, and booleans.


					x = 10
name = "Alice"
is_active = True

Control Structures:

Familiarity with if, else, and elif statements, as well as loops like for and while.


					for i in range(5):
    if i % 2 == 0:
        print(f"{i} is even")
        print(f"{i} is odd")


Know how to define and call functions. Functions are blocks of reusable code.


					def greet(name):
    return f"Hello, {name}!"



Understanding of Python Data Structures

A solid understanding of Python’s built-in data structures is crucial, especially when working with dictionaries.


Ordered collections that can store multiple items. Lists are mutable and can contain mixed data types.


					fruits = ["apple", "banana", "cherry"]


Similar to lists but immutable. Once you create a tuple, you cannot modify its content.


					coordinates = (4, 5)


Unordered collections of unique items. Sets are useful for removing duplicates or checking membership.


					unique_numbers = {1, 2, 2, 3, 3, 3}


As previously discussed, dictionaries store data in key-value pairs. Keys must be unique.


					person = {"name": "John", "age": 30}


Setting Up the Python Environment

Before you can start coding in Python, you need to set up a suitable environment.

  • Installation: Ensure that Python is installed on your machine. You can download the latest version of Python from the official website.

  • Integrated Development Environment (IDE): While Python comes with its own IDE called IDLE, many developers prefer using more advanced IDEs like PyCharm, Visual Studio Code, or Jupyter Notebook for a better coding experience.

  • Package Management: Familiarize yourself with pip, Python’s package manager. It allows you to install and manage additional libraries and dependencies. For example, to install the popular requests library, you’d use:

					pip install requests


Virtual Environments:

It’s a good practice to use virtual environments, especially when working on multiple projects. Tools like venv or virtualenv allow you to create isolated environments for your Python projects, ensuring that dependencies do not conflict.


					# Creating a virtual environment
python -m venv myenv

# Activating the virtual environment
source myenv/bin/activate  # On Windows, use: myenv\Scripts\activate


Having a foundational understanding of Python basics, its core data structures, and setting up a proper Python environment are crucial prerequisites. These ensure that you can effectively work with dictionaries and perform more complex operations like merging them.

Let's Discuss the Methods Now...

Method 1: The update() Method

Understanding the update() Method

The update() method is a built-in method provided by Python for dictionaries. It allows you to merge the contents of one dictionary into another. If keys in the dictionary being updated already exist in the original dictionary, their values are overwritten. If they don’t exist, they are added.

Syntax and Usage



  • dict1 is the dictionary you want to update.
  • dict2 contains the key-value pairs that will be added to or overwritten in dict1.

Note: The update() method modifies the dictionary in place and returns None. This means that dict1 will be changed directly, and you won’t get a new dictionary as a return value.

Practical Example: Merging with update()

Example 1: Basic Merging

Suppose you have two dictionaries containing user details, and you want to merge them.

					user_profile = {"name": "Alice", "age": 28}
user_contact = {"email": "", "phone": "123-456-7890"}

# Merging the dictionaries


					{'name': 'Alice', 'age': 28, 'email': '', 'phone': '123-456-7890'}


Example 2: Overwriting Values

If there are overlapping keys, the values from the second dictionary (dict2) will overwrite those in the first dictionary (dict1).

					user_profile = {"name": "Alice", "age": 28, "email": ""}
user_updates = {"age": 29, "email": ""}

# Merging the dictionaries


					{'name': 'Alice', 'age': 29, 'email': ''}


In this example, the age and email values in user_profile were overwritten by those in user_updates.

The update() method is a straightforward and efficient way to merge dictionaries in Python. It’s especially useful when you want to update an existing dictionary with new or modified key-value pairs from another dictionary. 

However, it’s essential to remember that it modifies the original dictionary in place, so if you need to retain the original dictionary unchanged, you should consider other merging methods or create a copy before using update().

Method 2: The ** Unpacking Operator

Introduction to Unpacking in Python

Unpacking in Python refers to breaking down a collection into individual elements. The ** operator is specifically used for unpacking dictionaries. It allows you to extract key-value pairs from one dictionary and use them in another context, such as creating a new dictionary or merging multiple dictionaries.

Merging Dictionaries with Unpacking

The ** operator can be used to merge two or more dictionaries into a new one. When dictionaries are merged using this method, the resulting dictionary contains all key-value pairs from the input dictionaries. If there are overlapping keys, the value from the latter dictionary will overwrite the value from the former.


					merged_dict = {**dict1, **dict2, ...}

  • dict1, dict2, … are the dictionaries you want to merge.
  • merged_dict is the new dictionary created by merging the input dictionaries.

Practical Example: Using the Unpacking Operator

Example 1: Basic Merging

Suppose you have two dictionaries containing user details and contact information, and you want to merge them.

					user_profile = {"name": "Bob", "age": 30}
user_contact = {"email": "", "phone": "987-654-3210"}

# Merging the dictionaries
merged_user = {**user_profile, **user_contact}


					{'name': 'Bob', 'age': 30, 'email': '', 'phone': '987-654-3210'}

Example 2: Overwriting Values with Unpacking

If there are overlapping keys between the dictionaries, the value from the latter dictionary will overwrite the value from the former.

					user_profile = {"name": "Bob", "age": 30, "email": ""}
user_updates = {"age": 31, "email": ""}

# Merging the dictionaries
updated_user = {**user_profile, **user_updates}


					{'name': 'Bob', 'age': 31, 'email': ''}


In this example, the age and email values in user_profile were overwritten by those in user_updates.


The ** unpacking operator provides a concise and readable way to merge dictionaries in Python. It’s especially useful when you want to create a new dictionary by combining key-value pairs from multiple dictionaries without modifying the original ones. This method is both elegant and efficient, making it a popular choice among Python developers for dictionary merging tasks.

Method 3: The | Merge Operator

Introduction to the Merge Operator

The | operator, also known as the merge operator, is designed specifically for merging dictionaries. It allows for a more concise and readable way to combine two dictionaries into a new one. If the dictionaries being merged have overlapping keys, the key-value pairs from the second dictionary will overwrite those from the first.

Syntax and Benefits


					merged_dict = dict1 | dict2

  • dict1 and dict2 are the dictionaries you want to merge.
  • merged_dict is the new dictionary resulting from the merge.
  1. Readability: The merge operator provides a clear and concise syntax, making the code more readable.
  2. Immutability: Unlike the update() method, which modifies the original dictionary in place, the merge operator creates a new dictionary, leaving the original dictionaries unchanged.
  3. Flexibility: It can be used in conjunction with other dictionary operations for more complex manipulations.

Practical Example: Merging with the Merge Operator

Example 1: Basic Merging

Suppose you have two dictionaries containing user details and preferences, and you want to merge them.

					user_details = {"name": "Charlie", "age": 25, "theme": "light"}
user_updates = {"age": 26, "theme": "dark"}

# Merging the dictionaries
updated_user = user_details | user_updates


					{'name': 'Charlie', 'age': 25, 'theme': 'dark', 'notifications': False}

Example 2: Overwriting Values with the Merge Operator

If there are overlapping keys between the dictionaries, the value from the second dictionary will overwrite the value from the first.

					user_details = {"name": "Charlie", "age": 25}
user_preferences = {"theme": "dark", "notifications": False}

# Merging the dictionaries
merged_user = user_details | user_preferences


					{'name': 'Charlie', 'age': 26, 'theme': 'dark'}


In this example, the age and theme values in user_details were overwritten by those in user_updates.

The | merge operator is a welcome addition to Python’s dictionary operations, providing a more intuitive way to merge dictionaries. It’s especially beneficial for developers who want a clear syntax and the assurance that original dictionaries remain unchanged. As it’s a feature introduced in Python 3.9, developers should ensure they’re using a compatible version to leverage this operator.

Method 4: Combining copy() and update()

The Need for Copying Dictionaries

Dictionaries in Python are mutable objects, meaning their contents can be changed after they are created. When you assign a dictionary to another variable, both variables point to the same memory location. As a result, changes made to one variable will reflect in the other. This can lead to unintended side effects in your code.

To avoid this, it’s often necessary to create a true copy of the dictionary, especially when you want to merge dictionaries without affecting the original ones. The copy() method provides a way to create a shallow copy of a dictionary.

Merging Using copy() and update()

The process involves three steps:

  1. Create a copy of the first dictionary using the copy() method.
  2. Use the update() method on the copied dictionary to merge it with the second dictionary.
  3. The result is a merged dictionary, and the original dictionaries remain unchanged.


					copied_dict = dict1.copy()


Practical Example: Safe Merging with Copy

Example 1: Basic Merging without Affecting Originals

Suppose you have two dictionaries containing product details and product ratings, and you want to merge them without altering the original dictionaries.

					product_details = {"name": "Laptop", "price": 1000}
product_ratings = {"user_rating": 4.5, "reviews": 150}

# Merging the dictionaries without affecting the originals
merged_product = product_details.copy()

print(product_details)  # Remains unchanged
print(product_ratings)  # Remains unchanged

					{'name': 'Laptop', 'price': 1000, 'user_rating': 4.5, 'reviews': 150}
{'name': 'Laptop', 'price': 1000}
{'user_rating': 4.5, 'reviews': 150}

Example 2: Demonstrating the Safety of the Copy

Let’s see what happens if we don’t use the copy() method:

					product_details = {"name": "Laptop", "price": 1000}
product_ratings = {"user_rating": 4.5, "reviews": 150}

# Merging without copying

print(product_details)  # Original dictionary has been modified

					{'name': 'Laptop', 'price': 1000, 'user_rating': 4.5, 'reviews': 150}


In this example, the original product_details dictionary was modified, which might not be the desired behavior in many scenarios.

Combining the copy() and update() methods provide a safe way to merge dictionaries without affecting the original dictionaries. This method is especially useful when you want to ensure data integrity and avoid unintended side effects in your code.

Method 5: Dictionary Comprehension

Basics of Dictionary Comprehension

Dictionary comprehension is a syntactic construct in Python that allows for the creation of dictionaries using a single line of code. It’s similar to list comprehension but produces a dictionary instead of a list.

					{key_expr: value_expr for item in iterable}

  • key_expr and value_expr are expressions that define the key-value pairs.
  • iterable is a collection of items that you iterate over.

Merging Dictionaries Using Comprehension

To merge dictionaries using comprehension, you can iterate over the key-value pairs of multiple dictionaries and combine them into a new dictionary.

					{key: value for d in (dict1, dict2) for key, value in d.items()}

  • Here, (dict1, dict2) creates a tuple of dictionaries.
  • The nested for loop iterates over each dictionary and then over its key-value pairs.

Practical Example: Efficient Merging with Comprehension

Example 1: Basic Merging

Suppose you have two dictionaries containing user details and user preferences, and you want to merge them using dictionary comprehension.

					user_details = {"name": "David", "age": 32}
user_preferences = {"theme": "light", "notifications": True}

# Merging the dictionaries using comprehension
merged_user = {key: value for d in (user_details, user_preferences) for key, value in d.items()}


					{'name': 'David', 'age': 32, 'theme': 'light', 'notifications': True}


Example 2: Merging with Overlapping Keys

If there are overlapping keys between the dictionaries, the value from the latter dictionary will overwrite the value from the former.

					user_details = {"name": "David", "age": 32, "theme": "dark"}
user_updates = {"age": 33, "theme": "light"}

# Merging the dictionaries using comprehension
updated_user = {key: value for d in (user_details, user_updates) for key, value in d.items()}


					{'name': 'David', 'age': 33, 'theme': 'light'}


In this example, the age and theme values in user_details were overwritten by those in user_updates.

Dictionary comprehension provides a compact and readable way to merge dictionaries in Python. It’s especially useful when you want a quick and efficient method to combine key-value pairs from multiple dictionaries into a new one. This method is both elegant and powerful, making it a valuable tool for Python developers.

Method 6: The ChainMap Approach

Introduction to the Collections Module

The collections module in Python’s standard library provides alternatives to built-in containers like dictionaries, lists, sets, and tuples. It offers specialized container datatypes that can be used to replace general-purpose containers based on specific needs.

What is ChainMap?

ChainMap is a class from the collections module. It groups multiple dictionaries into a single mapping. Lookups search the dictionaries in the order they are provided, so if a key is repeated in more than one dictionary, the value from the first dictionary containing the key is returned.

Practical Example: Merging with ChainMap

					from collections import ChainMap

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

merged = ChainMap(dict1, dict2)


					[{'a': 1, 'b': 2}, {'b': 3, 'c': 4}]


Note: In the case of overlapping keys, the value from dict1 is used.

Method 7: Using itertools.chain()

Overview of the itertools Module

The itertools module in Python’s standard library provides a set of fast, memory-efficient tools for working with iterators. It’s a collection of building blocks that can be combined to form more complex iterators.

The chain() Method Explained

The chain() method from the itertools module is used to chain multiple iterators together. When applied to dictionaries, it can be used to chain the items of multiple dictionaries, effectively merging them.

Practical Example: Merging with chain()

					import itertools

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

merged = dict(itertools.chain(dict1.items(), dict2.items()))


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


Note: In the case of overlapping keys, the value from dict2 overwrites the one from dict1.

Method 8: Crafting a Custom Function

The Need for Custom Functions

While Python provides various built-in methods to merge dictionaries, there might be scenarios where you need a specific merging behavior. In such cases, crafting a custom function can be the best approach.

Designing a Merge Function

A custom merge function can be designed to handle specific requirements, such as handling nested dictionaries, merging with specific conditions, or applying transformations during the merge.

Practical Example: Custom Merging

Suppose you want to merge dictionaries, but if there’s a key overlap, you want to sum the values:

					def custom_merge(dict1, dict2):
    result = dict1.copy()
    for key, value in dict2.items():
        if key in result:
            result[key] += value
            result[key] = value
    return result

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

merged = custom_merge(dict1, dict2)


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


In this example, the custom function merges the dictionaries and sums the values of overlapping keys.

Python offers a plethora of methods to merge dictionaries, from built-in functions to modules like collections and itertools. Depending on the specific requirements and the nature of the dictionaries being merged, developers can choose the method that best fits their needs. Crafting custom functions provides the utmost flexibility, allowing for tailored merging behaviors.

Comparative Analysis & Performance Metrics of Each Method

  • update() Method: Fast for small to medium-sized dictionaries. Modifies the original dictionary in place, which can be memory efficient but might not be desired in all scenarios.
  • Unpacking Operator: Offers good performance and is concise. Creates a new dictionary, so it’s memory-intensive for large dictionaries.

  • ChainMap: Efficient for large dictionaries as it doesn’t create a new dictionary but rather groups them. However, it’s not a true merge as the underlying dictionaries remain separate.

  • itertools.chain(): Efficient for chaining iterators but creates a new dictionary. Suitable for medium-sized dictionaries.

  • Custom Function: Performance varies based on the implementation. Can be optimized for specific use cases.

Best Practices and Recommendations


  • Memory vs. Performance: If memory usage is a concern, methods that modify dictionaries in place (like update()) or group them (like ChainMap) are preferable. For performance, unpacking and itertools.chain() are generally faster.

  • Overlapping Keys: Always be aware of how each method handles overlapping keys. Some methods overwrite values, while others might combine them.

  • Readability: For code that will be maintained or read by others, readability can be more important than slight performance gains. In such cases, the unpacking operator or a well-documented custom function might be preferable.

Pitfalls to Avoid

  • Modifying Original Dictionaries: Methods like update() modify the original dictionary. Always ensure you’re okay with this behavior or use a method that creates a new dictionary.

  • Assuming Order: Dictionaries in Python 3.7+ maintain insertion order, but relying on this can be risky if your code might run on older versions.

  • Nested Dictionaries: Most of the discussed methods don’t handle nested dictionaries well. If your dictionaries have nested dictionaries, a custom function might be necessary.


Key Takeaways

  • Python offers multiple ways to merge dictionaries, each with its advantages and trade-offs.

  • The best method often depends on the specific requirements of the task, such as the size of the dictionaries, memory concerns, and desired behavior for overlapping keys.

  • Always test the performance and behavior of the chosen method for your specific use case.

Encouragement for Further Exploration

Merging dictionaries is a fundamental operation in Python, but there’s always more to learn. Consider exploring:

  • How to merge nested dictionaries or dictionaries with complex structures.

  • The performance implications of each method on very large datasets.

  • Other modules or third-party libraries that offer advanced dictionary manipulation capabilities.

Remember, the best way to understand and master these methods is through practice. Experiment with different scenarios, test the boundaries, and always be curious!



Python | Merging two Dictionaries

You can merge two dictionaries using several methods, including the update() method, the ** unpacking operator, and the | merge operator (available in Python 3.9+).

The speed can vary based on the size of the dictionaries and the specific use case. Generally, the ** unpacking operator and the | merge operator (in Python 3.9+) are among the fastest. For large dictionaries, it’s recommended to benchmark different methods to find the most efficient one for your scenario.

You can combine multiple dictionaries using extended versions of the methods mentioned. For instance, with the ** unpacking operator, you can use {**dict1, **dict2, **dict3, ...}. Similarly, with the | merge operator, you can chain them like dict1 | dict2 | dict3 | ....

The update() method is a straightforward way to add the contents of one dictionary into another. Using dict1.update(dict2) will add all key-value pairs from dict2 into dict1. If there are overlapping keys, dict2‘s values will overwrite those in dict1.

Yes, some methods modify the original dictionary in place (like update()), while others create a new dictionary. It’s essential to be aware of this behavior. Also, if dictionaries have overlapping keys, the merging process might overwrite values, so always ensure you understand the behavior of the method you’re using.

About The Author

Leave a Comment

Your email address will not be published. Required fields are marked *