我有两个字典,来自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
。上面的代码仅用于总结部分。然而,要对差分部分做任何事情,假设在常见密钥的情况下可以改变求和以用于差分。
答案 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