我有两个字典,我需要将它们结合起来。我需要对相似键的值求和,而不同的键使它们不求和。
这是两个字典:
d1 = {'a': 100, 'b': 200, 'c':300}
d2 = {'a': 300, 'b': 200, 'd':400}
预期结果:
d3= {'b': 400, 'd': 400, 'a': 400, 'c': 300}
我已经成功地求和并将它们加到第三个字典中,但是我不知道如何添加不同的值。
我的尝试
d1 = {'a': 100, 'b': 200, 'c':300}
d2 = {'a': 300, 'b': 200, 'd':400}
d3 = {}
for i, j in d1.items():
for x, y in d2.items():
if i == x:
d3[i]=(j+y)
print(d3)
My results = {'a': 400, 'b': 400}
答案 0 :(得分:3)
没有collections.Counter
的版本:
d1 = {'a': 100, 'b': 200, 'c':300}
d2 = {'a': 300, 'b': 200, 'd':400}
d = {k: d1.get(k, 0) + d2.get(k, 0) for k in d1.keys() | d2.keys()}
print(d)
打印:
{'b': 400, 'c': 300, 'd': 400, 'a': 400}
编辑:带有for
循环:
d1 = {'a': 100, 'b': 200, 'c':300}
d2 = {'a': 300, 'b': 200, 'd':400}
d = {}
for k in d1.keys() | d2.keys():
d[k] = d1.get(k, 0) + d2.get(k, 0)
print(d)
答案 1 :(得分:1)
collections.Counter
完成您需要的操作:
from collections import Counter
d1 = {"a": 100, "b": 200, "c": 300}
d2 = {"a": 300, "b": 200, "d": 400}
d3 = Counter(d1) + Counter(d2)
# Counter({'a': 400, 'b': 400, 'd': 400, 'c': 300})
答案 2 :(得分:0)
我喜欢安德烈(Andrej)的回答(我喜欢列表/字典理解),但这又是另一回事:
@property
def products(self):
from django.forms.models import model_to_dict
res = []
for i in Product.objects.filter(company=self.id):
res.append(model_to_dict(i))
return res
我意识到,可以通过首先复制d1和d2中的值来“修复”您自己的代码。
d1 = {'a': 100, 'b': 200, 'c':300}
d2 = {'a': 300, 'b': 200, 'd':400}
d3 = dict(d1) # don't do `d3=d1`, you need to make a copy
d3.update(d2)
for i, j in d1.items():
for x, y in d2.items():
if i == x:
d3[i]=(j+y)
print(d3)
将d2的内容添加到d3中,但是它将覆盖通用键的值。 (使d3的内容为d3.update(d2)
)
但是,此后通过使用循环,我们可以通过分配总和来更正这些公共值。 :)