结合了两个用于通用键的字典加法运算值的Python程序

时间:2019-07-29 12:21:24

标签: python dictionary

我有两个字典,我需要将它们结合起来。我需要对相似键的值求和,而不同的键使它们不求和。

这是两个字典:

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}

3 个答案:

答案 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)

但是,此后通过使用循环,我们可以通过分配总和来更正这些公共值。 :)