I want to merge two Python dictionaries additive, like this:
a = {'result': {'sessionId': '111'}}
b = {'result': {'completelyOtherSessionId': '100'}}
##magic##
c = {'result': {'sessionId': '111', 'completelyOtherSessionId': '100'}}
I want to merge two Python dictionaries additive, like this:
a = {'result': {'sessionId': '111'}}
b = {'result': {'completelyOtherSessionId': '100'}}
##magic##
c = {'result': {'sessionId': '111', 'completelyOtherSessionId': '100'}}
>>> a = {'result': {'sessionId': '111'}}
>>> b = {'result': {'sessionsId': '100'}}
>>> с = a.copy()
>>> for key in c:
>>> c[key].update(b[key])
>>> print(c)
{'result': {'sessionId': '111', 'sessionsId': '100'}}
Please understand that this solution only works for your specific case (a
and b
's values are also dictionaries). Otherwise the update
method would not be available and you'd get an AttributeError
exception.
Here's a Python2/3 function that will not alter the dicts you give it. It will create a new one and attempt to combine them all. Keep in mind that it doesn't handle collisions in any advanced way. It simply overwrites it with the right-most dict parameter.
def add_dicts(*dicts):
ret, dicts = dict(), list(dicts)
dicts.insert(0, ret)
try:
red = reduce
except NameError:
red = __import__("functools").reduce
red(lambda x, y: x.update(y) or x, dicts)
return ret
Example:
a = {"a": 1}
b = {"b": 2}
c = {"c": 3}
var = add_dicts(a, b, c)
print(a) # => {"a": 1}
print(b) # => {"b": 2}
print(c) # => {"c": 3}
print(var) # => {'a': 1, 'c': 3, 'b': 2}