Python遍历动态键嵌套字典提取指定字段导出CSV方法
实现方案
直接使用Python内置的csv标准库即可完成需求,无需安装第三方依赖,核心是通过遍历results节点的所有值提取目标字段,不需要提前预知动态的设备键名。
完整可运行代码
import csv # 替换为你JSON解析后得到的原始字典 raw_dict = { "http_method":"GET", "results":{ "FTKMOB21xxxxD":{ "serial_number":"FTKMOB21xxxxD", "comments":"", "q_type":432, "license":"EFTM123123123", "type":"mobile", "user":"pippo", "user_type":"user", "drift":0, "status":{ "name":"activated" } }, "FTKMOB21xxxxF":{ "serial_number":"FTKMOB21xxxxF", "comments":"", "q_type":432, "license":"EFTM123123123", "type":"mobile", "drift":0, "status":{ "name":"pending" } } }, "vdom":"root", "path":"user", "name":"fortitoken", "action":"", "status":"success", "serial":"FGT_VM", "version":"v7.0.5", "build":304 } # 定义CSV表头 headers = ["serial_number", "user", "status"] rows = [] # 遍历results下所有设备条目,动态键名无需处理,直接取字典值即可 for device in raw_dict["results"].values(): current_row = { "serial_number": device.get("serial_number", ""), "user": device.get("user", ""), # status是嵌套字典,取内部name字段,缺值时返回空 "status": device.get("status", {}).get("name", "") } rows.append(current_row) # 写入CSV文件 with open("fortitoken_export.csv", "w", encoding="utf-8-sig", newline="") as f: writer = csv.DictWriter(f, fieldnames=headers) writer.writeheader() writer.writerows(rows)
关键说明
- 不需要硬编码
FTKMOB21xxxxD这类动态设备ID,调用字典的values()方法就能直接拿到所有设备的属性字典,直接循环即可 - 写入文件时指定
encoding="utf-8-sig"是为了兼容Excel打开时的中文乱码问题,newline=""是Python csv模块的标准要求,避免生成的文件出现多余空行 - 所有字段取值都用
get()方法实现,遇到个别设备缺失对应字段时不会抛出KeyError中断脚本,缺失内容会自动填充为空字符串 - 运行后生成的CSV内容如下:
serial_number,user,status FTKMOB21xxxxD,pippo,activated FTKMOB21xxxxF,,pending
内容的提问来源于stack exchange,提问作者Andrea Del Gaudio
相关产品推荐
相关产品推荐

