在Python中合并两个字典,以便添加/减去它们的键

时间:2015-10-11 12:23:37

标签: python dictionary merge

我有两个字典,来自factorint的{​​{1}}输出。我需要合并它们,以便公共密钥得到它们的值,即sympy.ntheory,而唯一键保持不变。

此外,我需要获得一个MergedDict[key] = Dict1[key] + Dict2[key]字典,其中公共密钥是差异的,即merged。此处MergedDict[key] = Dict1[key] - Dict2[key]个密钥始终是Dict2个密钥的子集,因此不存在负数问题。

我试图关注this question。但我无法让它发挥作用。到目前为止,我的方法如下:

Dict1

它给出错误from sympy.ntheory import factorint from collections import defaultdict d=factorint(12) dd = defaultdict(lambda: defaultdict(int)) for key, values_dict in d.items(): for date, integer in values_dict.items(): dd[key] += integer for n in range(2,6): u = factorint(n) for key, values_dict in u.items(): for date, integer in values_dict.items(): dd[key] += integer 。上面的代码仅用于总结部分。然而,要对差分部分做任何事情,假设在常见密钥的情况下可以改变求和以用于差分。

2 个答案:

答案 0 :(得分:2)

不确定你的目标是什么,但是factorint为你提供了键/值对的整数,所以你应该对值进行求和,你试图在{{1}的每个val上调用items这是一个整数,显然不会起作用:

dict

输出:

    from sympy.ntheory import factorint
    from collections import defaultdict

    d=factorint(12)
    dd = defaultdict(int)
    for key, val in d.items():
       dd[key] += val

    for n in range(2, 6):
        u = factorint(n)
        for key, val in u.items():
                dd[key] += val

    print(dd)

factorint是一个dict,不能有重复的键,所以第一个循环可以使用update来完成:

 defaultdict(<type 'int'>, {2: 5, 3: 2, 5: 1})

答案 1 :(得分:1)

似乎collections.Counter可以完成你想要的大部分工作。它可能很简单(未经测试,我没有安装sympy):

from collections import Counter
cnt1 = Counter(Dict1)
cnt2 = Counter(Dict2)
sum_cnt = cnt1 + cnt2
diff_cnt = cnt1 - cnt2