Append a dictionary to a dictionary [duplicate] Append a dictionary to a dictionary [duplicate] python python

Append a dictionary to a dictionary [duplicate]


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}


There are two ways to add one dictionary to another.

Update (modifies orig in place)

orig.update(extra)    # Python 2.7+orig |= extra         # Python 3.9+

Merge (creates a new dictionary)

# Python 2.7+dest = collections.ChainMap(orig, extra)dest = {k: v for d in (orig, extra) for (k, v) in d.items()}# Python 3dest = {**orig, **extra}          dest = {**orig, 'D': 4, 'E': 5}# Python 3.9+ dest = orig | extra

Note that these operations are noncommutative. In all cases, the latter is the winner. E.g.

orig  = {'A': 1, 'B': 2}extra = {'A': 3, 'C': 3}dest = orig | extra# dest = {'A': 3, 'B': 2, 'C': 3}dest = extra | orig# dest = {'A': 1, 'B': 2, 'C': 3}

It is also important to note that only from Python 3.7 (and CPython 3.6) dicts are ordered. So, in previous versions, the order of the items in the dictionary may vary.


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 chaindest = 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 chaindest = dict(chain.from_iterable(map(dict.items, list_of_dicts)))