我需要在python中组合两个字典,以便添加使用相同keyS的值。我已经基于collections.Counter找到了this answer,但是这对嵌套字典不起作用。
一个例子:
A = {0: {1: 8, 2: 4}, 1: {0: 8, 2: 3}, 2: {0: 3, 1: 7}}
B = {0: {1: 1, 2: 0}, 1: {0: 1, 2: 5}, 2: {0: 4, 1: 10}}
结果应该是:
combine(A,B) = {0: {1: 9, 2: 4}, 1: {0: 9, 2: 8}, 2: {0: 7, 1: 17}}
总是有两级嵌套,键组总是相同的。如果存在A [x] [y],则可以假设B [x] [y]也存在,反过来也是如此。两个dicts都初始化为0个条目。提前谢谢!
答案 0 :(得分:2)
以Counter
方法为基础:
combined = {k: Counter(A[k]) + Counter(B[k]) for k in A}
只要A和B具有相同的顶级键集,它就可以正常工作;它对二级密钥的差异很有用。
答案 1 :(得分:1)
def combine(a, b):
"""Combines two dictionaries of int-values through addition"""
return {outer_k: {inner_k: a[outer_k][inner_k] + b[outer_k][inner_k] for
inner_k in a[outer_k]} for
outer_k in a}
这是一个非常脆弱的解决方案,但由于您在a[k]
和a[k][kk]
中指定所有b
和b[k]
作为问题的一部分,因此这应该很有效!
答案 2 :(得分:0)
def add_dicts(dd1, dd2):
combD = {}
for i in dd1.keys():
combD[i] = dd1[i] + dd2[i]
return combD
for k in A.keys():
C[k] = add_dicts(A[k], B[k])
打印(C)强>
{0: {1: 9, 2: 4}, 1: {0: 9, 2: 8}, 2: {0: 7, 1: 17}}