Python 字典转置:纯原生实现 CSV 表格格式化输出

1次阅读

Python 字典转置:纯原生实现 CSV 表格格式化输出

本文介绍如何不依赖 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)

此方案零依赖、逻辑清晰、易于调试,是处理中小规模字典转置任务的推荐实践。

text=ZqhQzanResources