如何“压缩”两个嵌套字典

问题描述 投票:0回答:1

我有一个嵌套的dict,具有不同级别的嵌套

dict1 = {
'A': {'a': 1},
'B': 2,
'C': {'c': 3},
'D': {'d': {'dd': 4}}
}

我想执行(例如)键乘法,使用平面字典这很简单

{k, v * 2 for k, v in dict.items()}
,我怎样才能在上面的字典中做同样的事情?
后续问题是处理一对具有部分键重叠的嵌套字典。

dict2 = {
'A': {'a': 1},
'D': {'d': {'dd': 4}}
}

平面字典的按键添加很简单

{k, dict1[k] +dict2[k] for k, v in dict2.items()}
,我如何对嵌套字典做同样的事情?

python dictionary
1个回答
0
投票

您可以编写一个递归函数,将函数应用于它找到的所有非字典值:

def perform_func_on_values(d, func):
    for k,v in d.items():
        if isinstance(v, dict):
            perform_func_on_values(v, func)
        else:
            d[k] = func(v)

dict1 = {
'A': {'a': 1},
'B': 2,
'C': {'c': 3},
'D': {'d': {'dd': 4}}
}

print(dict1)
perform_func_on_values(dict1, lambda val:val*2)
print(dict1)

输出:

{'A': {'a': 1}, 'B': 2, 'C': {'c': 3}, 'D': {'d': {'dd': 4}}}
{'A': {'a': 2}, 'B': 4, 'C': {'c': 6}, 'D': {'d': {'dd': 8}}}

看看这是如何就地更改。

© www.soinside.com 2019 - 2024. All rights reserved.