簡體   English   中英

Python:使用add運算符組合嵌套字典

[英]Python: Combine nested dictionaries using add operator

我需要將python中的兩個字典組合在一起,以便添加使用相同keyS的值。 我已經基於collections.Counter找到了這個答案 ,但這不適用於嵌套字典。

一個例子:

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]也存在,反之亦然。 這兩個字典都以0項初始化。 提前致謝!

建立在Counter方法上:

combined = {k: Counter(A[k]) + Counter(B[k]) for k in A}

只要A和B具有相同的頂級密鑰集,此方法就起作用。 它對於第二級鍵中的差異具有魯棒性。

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] ,所以這應該很好用!

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}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM