我有一个嵌套的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()}
,我如何对嵌套字典做同样的事情?
您可以编写一个递归函数,将函数应用于它找到的所有非字典值:
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}}}
看看这是如何就地更改。