Python嵌套字典合并时缺失键补0未生效问题排查
问题原因分析
- 核心逻辑错误:内层循环仅遍历当前count对应子字典的已有键,缺失的键从未进入循环逻辑,自然不会触发补0操作
- 条件判断冗余:你遍历的
variable本身就来自foo[count].keys(),所以if variable in foo[count].keys()永远为真,elif和else分支完全不会被触发
正确实现方案
实现步骤
- 先收集所有子字典的唯一键,得到完整的键集合
- 按顺序遍历所有count层级,对每个完整键集合中的键,判断是否存在于当前子字典,存在则追加对应值,不存在追加0
示例代码
from collections import defaultdict foo = { 0 : { "a": 2, "b": 5, "c": 6}, 1 : { "a": 3, "b": 8, "d": 9}, 2 : { "b": 5, "d": 9, "c": 3}} # 收集所有唯一键 all_keys = set() for sub_dict in foo.values(): all_keys.update(sub_dict.keys()) # 按数字顺序排列count,保证顺序正确 sorted_counts = sorted(foo.keys()) result = defaultdict(list) for cnt in sorted_counts: current_sub = foo[cnt] # 遍历所有完整键,而不是仅遍历当前子字典的键 for key in all_keys: result[key].append(current_sub.get(key, 0)) # 转换为普通字典(可选,按需操作) result = dict(result) print(result)
输出结果
{'a': [2, 3, 0], 'b': [5, 8, 5], 'c': [6, 0, 3], 'd': [0, 9, 9]}
内容的提问来源于stack exchange,提问作者xjshock
相关产品推荐
相关产品推荐

