如果类型不是dict,我如何在第二个for循环中更新字典


dic={"a":1,
"b":5,
"c":{"a":3,"c":-5,"d":{"a":1,"b":3}}}

,输出

{"a":5,"b":8,"c":-5,"d":0}

我正面临更新字典秒for循环

d=dict()
d2=dict()
for i in dic:
c_dict=dic[i]
if type(dic[i])!=dict:              #a:1 ,b:5
d[i] = dic[i]
else:
for j in c_dict:
value=c_dict[j]
if type(value)!=dict:
d2[j]=value

d2[j]=value对于这个,我必须更新a和b的先前值

这里的问题是d键是否应该在结果字典中。如果要忽略它,则:

dic = {"a": 1,
"b": 5,
"c": {"a": 3, "c": -5, "d": {"a": 1, "b": 3}}}
result = {}
def process(d):
for k, v in d.items():
if isinstance(v, dict):
process(v)
else:
result[k] = result.get(k, 0) + v
process(dic)
print(result)

输出:

{'a': 5, 'b': 8, 'c': -5}

注意:

这里的假设是所有值要么是字典类型,要么是数字类型

  1. 由于您需要对字典的多个级别实现相同的功能,因此您需要递归方法来处理字典:

    • 如果值为int,则添加
    • 如果值为dict,则调用该值的方法
  2. 当你想对每个值做加法时,你需要确保在加法之前有一个值,你可以用defaultdict(int)来解决这个问题,这将确保你问的每个键都是零,所以你可以直接做+=

from collections import defaultdict

def add_to_dict(base, more_values):
for k, val in more_values.items():
base[k] += 0  # for keys like 'd'
if isinstance(val, dict):
add_to_dict(base, val)
else:
base[k] += val

data = {"a": 1, "b": 5,
"c": {"a": 3, "c": -5, "d": {"a": 1, "b": 3}}}
result = defaultdict(int)
add_to_dict(result, data)
print(result)  # {"a": 5, "b": 8, "c": -5, "d": 0}

相关内容

  • 没有找到相关文章

最新更新