跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

Python 字典转置:纯 Python 实现 CSV 格式行列翻转

本文介绍如何不依赖 numpy 或 itertools,仅用原生 python 将嵌套字典按“外层键为列、内层键为行”完成转置,并输出符合要求的 csv 格式字符串。 本文介绍如何不依赖 numpy 或 itertools,仅用原生 python 将嵌套字典按“外层键为列、内层键为行”完成转置,并输出符合要求的 csv 格式字符串。 在数据处理中,常需将「以样本 ID 为外键、特征名为内键」的嵌套字典(类似宽表结构)转置为「特征名作行索引、ID 作列索引」的 CSV 表格格式。本例中,原始字典 data_dict 的结构为:
data_dict = { 1: {'One': 110, 'Two': 210, 'three': 310}, 2: {'One': 120, 'Two': 220, 'three': 320}, 3: {'One': 130, 'Two': 230, 'three': 330} }
目标是生成如下 CSV 字符串(注意首行为空字符串 '' + 所有外层键,后续每行为一个内层键及其对应各列值):
'',1,2,3 One,110,120,130 Two,210,220,230 three,310,320,330
核心思路是构建一个临时字典 temp_dict,其中: 键为最终 CSV 的行头(即内层键,如 'One';另加特殊键 "''" 表示首行); 值为对应位置的数值列表(长度等于外层键数量,顺序与 data_dict.keys() 一致)。 以下是简洁、可读性强的纯 Python 实现: 立即学习 “ Python免费学习笔记(深入) ”; Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 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:遍历每个样本(外层值),将其内层键值对追加到对应行 for inner_dict in data_dict.values(): for key, value in inner_dict.items(): temp_dict.setdefault(key, []).append(value) # 步骤3:按指定顺序输出 CSV 行(推荐先确定行序,避免字典无序导致结果不稳定) # 这里我们以 "''" 开头,其余行按原始内层键首次出现顺序排列(或按字母序更稳妥) # 为确保稳定,显式定义行顺序(取第一个样本的 keys 作为基准) if data_dict: first_inner_keys = next(iter(data_dict.values())).keys() row_order = ["''"] + list(first_inner_keys) else: row_order = ["''"] # 输出 for row_key in row_order: if row_key in temp_dict: print(row_key, *temp_dict[row_key], sep=",")
✅ 输出结果 :
'',1,2,3 One,110,120,130 Two,210,220,230 three,310,320,330
⚠️ 注意事项 : Python 3.7+ 中字典保持插入顺序,但为兼容性和逻辑清晰,建议显式控制 row_order(如上所示),而非依赖 temp_dict.keys() 的遍历顺序; 若不同样本的内层键不完全一致(存在缺失或新增字段),需额外做对齐处理(例如用 None 或默认值填充),本例假设结构一致; 如需写入文件而非打印,可将 print(...) 替换为 f.write(...),并注意添加换行符; 此方案时间复杂度为 O(N×M),N 为外层数量,M 为平均内层键数,空间复杂度 O(N×M),高效且无第三方依赖。 掌握该模式后,可轻松扩展至导出 CSV 文件、生成 Markdown 表格或对接 pandas DataFrame 构造等下游任务。

相关文章