# python – Append a dictionary to a dictionary

## The Question :

381 people think this question is useful

I have two existing dictionaries, and I wish to ‘append’ one of them to the other. By that I mean that the key,values of the other dictionary should be made into the first dictionary. For example:

orig = {
'A': 1,
'B': 2,
'C': 3,
}

extra = {
'D': 4,
'E': 5,
}

dest = # Something here involving orig and extra

print dest
{
'A': 1,
'B': 2,
'C': 3,
'D': 4,
'E': 5
}



I think this all can be achieved through a for loop (maybe?), but is there some method of dictionaries or any other module that saves this job for me? The actual dictionaries I’m using are really big…

• A few answers point out orig.update(extra) does the job. Do take note that if extra and orig have overlapping keys, the final value will be taken from extra. For example, d1={1: 1, 2: 2}; d2={2: 'ha!', 3: 3}; d1.update(d2) will result in d1 containing {1: 1, 2: 'ha!', 3: 3}.

561 people think this answer is useful

You can do

orig.update(extra)



or, if you don’t want orig to be modified, make a copy first:

dest = dict(orig)  # or orig.copy()
dest.update(extra)



Note that if extra and orig have overlapping keys, the final value will be taken from extra. For example,

>>> d1 = {1: 1, 2: 2}
>>> d2 = {2: 'ha!', 3: 3}
>>> d1.update(d2)
>>> d1
{1: 1, 2: 'ha!', 3: 3}



111 people think this answer is useful

The most Pythonic (and slightly faster) way to accomplish this is by:

dest = {**orig, **extra}



Or, depending on the problem to solve, maybe:

dest = {**orig, 'D': 4, 'E': 5}



26 people think this answer is useful

Assuming that you do not want to change orig, you can either do a copy and update like the other answers, or you can create a new dictionary in one step by passing all items from both dictionaries into the dict constructor:

from itertools import chain
dest = dict(chain(orig.items(), extra.items()))



Or without itertools:

dest = dict(list(orig.items()) + list(extra.items()))



Note that you only need to pass the result of items() into list() on Python 3, on 2.x dict.items() already returns a list so you can just do dict(orig.items() + extra.items()).

As a more general use case, say you have a larger list of dicts that you want to combine into a single dict, you could do something like this:

from itertools import chain
dest = dict(chain.from_iterable(map(dict.items, list_of_dicts)))



20 people think this answer is useful

dict.update() looks like it will do what you want…

>> orig.update(extra)
>>> orig
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}
>>>



Perhaps, though, you don’t want to update your original dictionary, but work on a copy:

>>> dest = orig.copy()
>>> dest.update(extra)
>>> orig
{'A': 1, 'C': 3, 'B': 2}
>>> dest
{'A': 1, 'C': 3, 'B': 2, 'E': 5, 'D': 4}



9 people think this answer is useful

A three-liner to combine or merge two dictionaries:

dest = {}
dest.update(orig)
dest.update(extra)



This creates a new dictionary dest without modifying orig and extra.

Note: If a key has different values in orig and extra, then extra overrides orig.

7 people think this answer is useful

There is the .update() method 🙂

update([other]) Update the dictionary with the key/value pairs from other, overwriting existing keys. Return None.

update() accepts either another dictionary object or an iterable of key/value pairs (as tuples or other iterables of length two). If keyword arguments are specified, the dictionary is then updated with those key/value pairs: d.update(red=1, blue=2).

Changed in version 2.4: Allowed the argument to be an iterable of key/value pairs and allowed keyword arguments.