Python3如何将包含嵌套字典、列表的复杂对象列表转换为CSV格式
Python3 复杂嵌套对象转CSV的实现方案
下面提供两种符合Python规范、低维护成本的方案,可根据需求选择:
方案1:标准库实现(优先推荐,适配你的需求场景)
仅依赖Python内置标准库,无第三方依赖,兼顾可读性和100%数据还原性,自动适配结构不一致的输入数据。
实现代码
import csv import json import sys # 此处替换为你解析JSON后得到的字典列表 input_data = [ {"pKey1": 1, "pKey2": ['a', 'b', 'c'], "pKey3": {"dKey1": "val1", "dKey2": "val2"}}, {"pKey1": (2, 3), "pKey2": "This is different", "pKey3": ["Very", ("Very", "Different")]} ] def serialize_val(val): # 基础类型直接输出,非基础类型转标准JSON字符串存储 if isinstance(val, (str, int, float, bool, type(None))): return val return json.dumps(val, ensure_ascii=False) # 自动收集所有出现过的键,适配结构不一致的场景 all_keys = set() for item in input_data: all_keys.update(item.keys()) all_keys = sorted(all_keys) # 可根据需要调整列的排序规则 # 输出到标准输出,适配管道调用 csv_writer = csv.writer(sys.stdout) csv_writer.writerow(all_keys) for item in input_data: row = [serialize_val(item.get(key)) for key in all_keys] csv_writer.writerow(row)
方案优势
- 逻辑极简,总代码量不到30行,无复杂逻辑,非开发人员也能快速理解
- 完美适配管道调用场景,输出直接到stdout,符合你提到的
python3 script1.py | tee file.csv | python3 script2.py用法 - 可还原性100%,需要恢复原始数据结构时,只需要对每个字段做JSON反序列化即可,示例还原逻辑:
def deserialize_val(val): if not isinstance(val, str): return val try: return json.loads(val) except (json.JSONDecodeError, ValueError): return val - 输出的CSV可直接用Excel、记事本打开,非基础类型的内容是标准JSON格式,可读性高。
方案2:全展平输出(适合需要直接用Excel做数据分析的场景)
如果需要把嵌套结构完全展开成二维表格,使用pandas官方提供的json_normalize方法即可,不需要自己写任何展平逻辑。
实现代码
import pandas as pd import sys # 此处替换为你解析JSON后得到的字典列表 input_data = [ {"pKey1": 1, "pKey2": ['a', 'b', 'c'], "pKey3": {"dKey1": "val1", "dKey2": "val2"}}, {"pKey1": 2, "pKey2": ['d'], "pKey3": {"dKey1": "val3", "dKey2": "val4"}} ] # 自动展平嵌套字典,生成`父键.子键`格式的列名 df = pd.json_normalize(input_data) # 如果需要把列表类型的字段拆分成多行,指定对应列名即可,支持多列拆分 df = df.explode("pKey2", ignore_index=True) # 输出到标准输出,utf-8-sig编码适配Excel中文不乱码 df.to_csv(sys.stdout, index=False, encoding="utf-8-sig")
输出效果
pKey1,pKey2,pKey3.dKey1,pKey3.dKey2 1,a,val1,val2 1,b,val1,val2 1,c,val1,val2 2,d,val3,val4
方案优势
- 所有展平逻辑都是pandas官方标准实现,不需要维护自定义展平代码,厂商数据结构变动也能自动适配
- 自动兼容结构不一致的输入数据,缺失字段自动填充空值
- 输出的二维表格可以直接导入Excel做统计分析,不需要额外处理。
内容的提问来源于stack exchange,提问作者Weylin Piegorsch
相关产品推荐
相关产品推荐

