
本文介绍如何不依赖 numpy 或 itertools,仅用 python 原生语法将嵌套字典「按键转置」为 csv 行列结构,适用于导出为表格、生成报告等场景。
本文介绍如何不依赖 numpy 或 itertools,仅用 python 原生语法将嵌套字典「按键转置」为 csv 行列结构,适用于导出为表格、生成报告等场景。
在数据处理中,常遇到类似「外层键为列索引、内层键为行标题、值为单元格内容」的嵌套字典结构。若需将其转换为标准 CSV 表格(即行列互换),本质是执行一次字典转置(dictionary transpose):原结构中 data_dict[outer_key][inner_key] = value,目标结构应变为以 inner_key 为第一列(行头),各 outer_key 为后续列头,对应 value 按顺序填充。
以下是一个简洁、可读性强、完全基于 Python 内置语法的实现方案:
data_dict = {
1: {'One': 110, 'Two': 210, 'three': 310},
2: {'One': 120, 'Two': 220, 'three': 320},
3: {'One': 130, 'Two': 230, 'three': 330}
}
# 步骤 1:初始化临时字典,首行为列索引(空字符串 + 外层键列表)
temp_dict = {"''": list(data_dict.keys())}
# 步骤 2:遍历每个内层字典,按 inner_key 聚合所有 outer_key 对应的 value
for inner_dict in data_dict.values():
for key, value in inner_dict.items():
temp_dict.setdefault(key, []).append(value)
# 步骤 3:按需输出 CSV 格式(逗号分隔,无引号转义;如需严格 CSV,请用 csv 模块)
for row_key, row_values in temp_dict.items():
print(row_key, *row_values, sep=",")✅ 输出结果:
'',1,2,3 One,110,120,130 Two,210,220,230 three,310,320,330
⚠️ 注意事项:
立即学习“Python免费学习笔记(深入)”;
- 该方法假设所有内层字典具有一致的键集合(即每行字段对齐)。若存在缺失键(如某 outer_key 缺少 'Three'),需提前补全(例如用 None 或默认值),否则会导致列错位;
- ''.join() 或 print(..., sep=",") 仅适用于简单 ASCII 数据;若字段含逗号、换行符或双引号,务必改用标准 csv 模块(如 csv.writer)以保证合规性;
- setdefault(key, []) 是关键技巧——它避免重复检查键是否存在,兼具初始化与追加功能,比 if key not in d: d[key] = [] 更简洁高效。
? 进阶提示: 若需保存为文件而非打印,只需将最后循环替换为:
with open("output.csv", "w", newline="") as f:
writer = csv.writer(f)
for row_key, row_values in temp_dict.items():
writer.writerow([row_key] + row_values)此方案零依赖、逻辑清晰、易于调试,是处理中小规模字典转置任务的推荐实践。










