Append a dictionary to a dictionary
Categories:
How to Append One Dictionary to Another in Python

Learn various methods to merge or append dictionaries in Python, from simple updates to creating new merged dictionaries, ensuring efficient data handling.
Appending one dictionary to another is a common operation in Python programming, especially when dealing with configuration settings, data aggregation, or combining different data sources. Python offers several straightforward and efficient ways to achieve this, each with its own use cases and implications for mutability and performance. This article will explore the most popular and Pythonic methods, helping you choose the best approach for your specific needs.
Understanding Dictionary Merging
When we talk about 'appending' dictionaries, we're generally referring to the process of merging their key-value pairs. If both dictionaries contain the same key, the value from the dictionary being 'appended' (or merged into) typically overwrites the value in the original dictionary. Understanding this behavior is crucial to avoid unexpected data loss or modification.
flowchart TD A[Start with dict1] --> B{Merge dict2 into dict1?} B -- Yes --> C[Iterate through dict2] C --> D{Key exists in dict1?} D -- Yes --> E[Overwrite dict1's value with dict2's value] D -- No --> F[Add new key-value pair to dict1] E --> G{More keys in dict2?} F --> G G -- Yes --> C G -- No --> H[End: dict1 contains merged data] B -- No --> I[Create new dict3 from dict1 and dict2] I --> H
Flowchart illustrating the dictionary merging process.
Method 1: Using the update()
Method
The update()
method is the most common and direct way to append one dictionary to another in Python. It modifies the original dictionary in-place by adding key-value pairs from another dictionary (or an iterable of key-value pairs). If a key exists in both dictionaries, the value from the dictionary passed to update()
will overwrite the existing value.
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
dict1.update(dict2)
print(dict1)
# Output: {'a': 1, 'b': 3, 'c': 4}
Using the update()
method to merge dict2
into dict1
.
update()
method modifies the dictionary it's called on directly. If you need to preserve the original dictionaries, consider creating a copy first or using other methods that return a new dictionary.Method 2: Dictionary Unpacking (Python 3.5+)
Python 3.5 introduced dictionary unpacking using the **
operator, which provides a concise and readable way to merge dictionaries. This method creates a new dictionary, leaving the original dictionaries unchanged. When duplicate keys are encountered, the value from the rightmost dictionary takes precedence.
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged_dict = {**dict1, **dict2}
print(merged_dict)
# Output: {'a': 1, 'b': 3, 'c': 4}
print(dict1)
# Output: {'a': 1, 'b': 2} (dict1 remains unchanged)
Merging dictionaries using the dictionary unpacking operator (**
).
Method 3: Using the Pipe Operator |
(Python 3.9+)
Python 3.9 introduced a new, more explicit way to merge dictionaries using the pipe operator (|
). This operator provides a clear syntax for combining dictionaries and, like dictionary unpacking, returns a new dictionary without modifying the originals. The right-hand operand's values take precedence for duplicate keys.
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged_dict = dict1 | dict2
print(merged_dict)
# Output: {'a': 1, 'b': 3, 'c': 4}
# For in-place update (similar to .update()):
dict1 |= dict2
print(dict1)
# Output: {'a': 1, 'b': 3, 'c': 4}
Merging dictionaries using the pipe operator (|
) and in-place update (|=
).
|
operator is generally preferred for its readability and explicit nature when creating a new merged dictionary, especially in Python 3.9 and later. For in-place updates, |=
offers a concise alternative to update()
.Choosing the Right Method
The best method depends on your specific requirements:
update()
: Use when you want to modify an existing dictionary in-place and don't need to preserve the original state of the target dictionary.- Dictionary Unpacking (
**
): Ideal for creating a new merged dictionary without altering the originals. It's very readable and widely used in Python 3.5+. - Pipe Operator (
|
): The most modern and explicit way to create a new merged dictionary (Python 3.9+). It also offers an in-place version (|=
) for modifying an existing dictionary.
All these methods handle key collisions by prioritizing the values from the dictionary being merged (the rightmost dictionary in unpacking/pipe operations, or the argument to update()
). Choose the method that best fits your Python version, desired mutability, and code readability preferences.