
本文介绍一种精准合并多个字典的方法:对每个键,按字典在列表中的原始顺序收集对应值;若某字典不含该键,则在结果中对应位置插入空字符串,确保各键值列表长度一致且位置严格对齐,便于后续构建结构准确的 dataframe。
本文介绍一种精准合并多个字典的方法:对每个键,按字典在列表中的原始顺序收集对应值;若某字典不含该键,则在结果中对应位置插入空字符串,确保各键值列表长度一致且位置严格对齐,便于后续构建结构准确的 dataframe。
在数据预处理中,常需将一组结构不完全一致的字典(如 API 响应或日志记录)合并为列对齐的二维结构。关键挑战在于:既要保留所有键,又要严格维持每个键值在原始字典索引位置上的对应关系——即第 i 个值必须来自 dictionaries[i],若该字典无此键,则填 ""(而非跳过或错位)。
上述需求无法通过简单的 defaultdict(list) 累加实现,因为后者会忽略“缺失”位置,导致各键的列表长度不一、索引错位。正确解法需显式跟踪字典索引,并动态补全前置空值:
from collections import defaultdict
dictionaries = [
{"Key 1": "value1", "Key 2": "value2", "Key 3": "value3"},
{"Key 1": "value4", "Key 3": "value5", "Key 4": "value6"},
{"Key 1": "value7", "Key 2": "value8", "Key 4": "value9"}
]
result = defaultdict(list)
n = len(dictionaries) # 总字典数量,用于最终长度校验
for i, d in enumerate(dictionaries):
for k, v in d.items():
# 若 result[k] 当前长度不足 i,说明前面有字典缺失该键 → 补 "" 至索引 i-1
while len(result[k]) < i:
result[k].append("")
# 在索引 i 处追加当前值
result[k].append(v)
# 遍历完成后,检查每个键的列表是否达到总长度 n;若不足,末尾补 ""
for k in result:
while len(result[k]) < n:
result[k].append("")
mergedDictionaries = dict(result)
print(mergedDictionaries)
# 输出:
# {
# 'Key 1': ['value1', 'value4', 'value7'],
# 'Key 2': ['value2', '', 'value8'],
# 'Key 3': ['value3', 'value5', ''],
# 'Key 4': ['', 'value6', 'value9']
# }✅ 核心逻辑说明:
- 外层循环 enumerate(dictionaries) 提供当前字典索引 i;
- 内层遍历字典键值对时,先用 while 循环将 result[k] 填充至长度 i(即补足此前缺失的位置),再追加当前值,确保 v 落在正确索引;
- 最后统一补齐末尾缺失项,保证所有键值列表长度均为 n。
⚠️ 注意事项:
- 此方法时间复杂度为 O(N×M),其中 N 为字典数,M 为平均键数,适用于中等规模数据;
- 若需更高性能或处理超大数据集,可预先提取全量键集合(all_keys = set().union(*dictionaries)),再按固定顺序遍历,避免动态 while 扩容;
- 空值使用 "" 是示例约定,实际中可根据需要替换为 None、pd.NA 或其他占位符,尤其在配合 pandas 构建 DataFrame 时需注意类型一致性。
该方案生成的 mergedDictionaries 可直接传入 pandas.DataFrame() 构造函数,各列数据严格对齐,无需额外清洗即可用于分析或导出。

















