Adding dictionaries together


Python Problem Overview

I have two dictionaries and I'd like to be able to make them one:

Something like this pseudo-Python would be nice:

dic0 = {'dic0': 0}
dic1 = {'dic1': 1}

ndic = dic0 + dic1
# ndic would equal {'dic0': 0, 'dic1': 1}

Python Solutions

Solution 1 - Python

If you're interested in creating a new dict without using intermediary storage: (this is faster, and in my opinion, cleaner than using dict.items())

dic2 = dict(dic0, **dic1)

Or if you're happy to use one of the existing dicts:


Solution 2 - Python

Here are quite a few ways to add dictionaries.

You can use Python3's dictionary unpacking feature.

ndic = {**dic0, **dic1}

Or create a new dict by adding both items.

ndic = dict(dic0.items() + dic1.items())

If your ok to modify dic0


If your NOT ok to modify dic0

ndic = dic0.copy()

If all the keys in one dict are ensured to be strings (dic1 in this case, of course args can be swapped)

ndic = dict(dic0, **dic1)

In some cases it may be handy to use dict comprehensions (Python 2.7 or newer),
Especially if you want to filter out or transform some keys/values at the same time.

ndic = {k: v for d in (dic0, dic1) for k, v in d.items()}

Solution 3 - Python

>>> dic0 = {'dic0':0}
>>> dic1 = {'dic1':1}
>>> ndic = dict(dic0.items() + dic1.items())
>>> ndic
{'dic0': 0, 'dic1': 1}

Solution 4 - Python

You are looking for the update method

dic0.update( dic1 )
print( dic0 ) 


{'dic0': 0, 'dic1': 1}

Solution 5 - Python


Note this doesn't actually return the combined dictionary, it just mutates dic0.

Solution 6 - Python

The easiest way to do it is to simply use your example code, but using the items() member of each dictionary. So, the code would be:

dic0 = {'dic0': 0}
dic1 = {'dic1': 1}
dic2 = dict(dic0.items() + dic1.items())

I tested this in IDLE and it works fine. However, the previous question on this topic states that this method is slow and chews up memory. There are several other ways recommended there, so please see that if memory usage is important.


All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionrectangletangleView Question on Stackoverflow
Solution 1 - PythonbluepnumeView Answer on Stackoverflow
Solution 2 - Pythonideasman42View Answer on Stackoverflow
Solution 3 - PythonVijayView Answer on Stackoverflow
Solution 4 - PythonmmmmmmView Answer on Stackoverflow
Solution 5 - PythonDaniel RosemanView Answer on Stackoverflow
Solution 6 - PythonLukeFitzView Answer on Stackoverflow