Python:使用add运算符组合嵌套字典

时间:2015-09-28 22:24:58

标签: python dictionary

我需要在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个条目。提前谢谢!

3 个答案:

答案 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]中指定所有bb[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}}