Add Values From Two Dictionaries
dict1 = {a: 5, b: 7} dict2 = {a: 3, c: 1} result {a:8, b:7, c:1} How can I get the result?
Solution 1:
this is a one-liner that would do just that:
dict1 = {'a': 5, 'b': 7}
dict2 = {'a': 3, 'c': 1}
result = {key: dict1.get(key, 0) + dict2.get(key, 0)
for key inset(dict1) | set(dict2)}
# {'c': 1, 'b': 7, 'a': 8}
note that set(dict1) | set(dict2)
is the set of the keys of both your dictionaries. and dict1.get(key, 0)
returns dict1[key]
if the key exists, 0
otherwise.
this works on a more recent python version:
{k: dict1.get(k, 0) + dict2.get(k, 0) for k in dict1.keys() | dict2.keys()}
Solution 2:
You can use collections.Counter
which implements addition +
that way:
>>>from collections import Counter>>>dict1 = Counter({'a': 5, 'b': 7})>>>dict2 = Counter({'a': 3, 'c': 1})>>>dict1 + dict2
Counter({'a': 8, 'b': 7, 'c': 1})
if you really want the result as dict you can cast it back afterwards:
>>> dict(dict1 + dict2)
{'a': 8, 'b': 7, 'c': 1}
Solution 3:
Here is a nice function for you:
defmerge_dictionaries(dict1,dict2):merged_dictionary= {}
for key in dict1:if key in dict2:new_value=dict1[key]+dict2[key]else:new_value=dict1[key]merged_dictionary[key]=new_valuefor key in dict2:if key not in merged_dictionary:merged_dictionary[key]=dict2[key]returnmerged_dictionary
by writing:
dict1 = {'a': 5, 'b': 7}
dict2 = {'a': 3, 'c': 1}
result = merge_dictionaries(dict1, dict2)
result will be:
{'a': 8, 'b': 7, 'c': 1}
Solution 4:
A quick dictionary comprehension that should work on any classes which accept the + operator. Performance might not be optimal.
{
**dict1,
**{ k:(dict1[k]+v if k in dict1 else v)
for k,v in dict2.items() }
}
Solution 5:
Here is another approach but it is quite lengthy!
d1 = {'a': 5, 'b': 7}
d2 = {'a': 3, 'c': 1}
d={}
fori,j in d1.items():
fork,l in d2.items():
if i==k:
c={i:j+l}
d.update(c)
fori,j in d1.items():
if i not in d:
d.update({i:j})
form,n in d2.items():
if m not in d:
d.update({m:n})
Post a Comment for "Add Values From Two Dictionaries"