[英]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]
都在b
和b[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.