如何在第二层for循环中更新字典,合并嵌套字典非字典值
问题解决:嵌套字典的键值累加
给定嵌套字典:
dic={"a":1, "b":5, "c":{"a":3,"c":-5,"d":{"a":1,"b":3}}}
期望输出:
{"a":5,"b":8,"c":-5,"d":0}
你的现有代码存在三个核心问题:
- 仅处理了两层嵌套,遗漏了更深层级的键值对(比如
d对应的字典里的a和b) - 拆分了
d和d2两个字典,没有实现统一累加逻辑 - 未处理「仅作为字典键存在、无对应数值」的键(比如
d)
修正后的实现代码
使用递归遍历所有层级的嵌套结构,统一在一个字典中完成累加:
def accumulate_nested_keys(nested_dict): result = {} def traverse(current_dict): for key, value in current_dict.items(): if isinstance(value, dict): # 递归处理嵌套字典 traverse(value) # 若当前键未在结果中,初始化为0(仅作为字典键存在的情况) if key not in result: result[key] = 0 else: # 累加数值型值 if key in result: result[key] += value else: result[key] = value traverse(nested_dict) return result # 测试 dic={"a":1, "b":5, "c":{"a":3,"c":-5,"d":{"a":1,"b":3}}} print(accumulate_nested_keys(dic))
代码逻辑说明
- 递归遍历:通过内部函数
traverse递归处理所有层级的嵌套字典,确保不会遗漏任何键值对 - 数值累加:遇到非字典类型的值时,直接在结果字典中对对应键的值进行累加
- 字典键初始化:遇到值为字典的键时,先递归处理其内部内容,再检查该键是否已在结果中,未存在则初始化为0(对应
d的情况)
内容的提问来源于stack exchange,提问作者sachin shende
相关产品推荐
相关产品推荐

