如何将Python嵌套字典列表转换为指定字段的CSV文件
实现方案
问题根源有两个:
- 原始数据是双层嵌套列表,最外层额外套了一层列表,直接传入pandas会导致结构解析不符合预期
- 没有显式指定导出字段,pandas默认会读取字典所有键作为列导出,空字典、空列表这类非目标字段也会被带出
完整代码
import pandas as pd # 原始输入数据 raw_data = [[{'id': 1, 'networkId': 'L_1111', 'name': 'VLAN1', 'applianceIp': '1.1.1.1', 'subnet': '1.1.1.0/24', 'fixedIpAssignments': {}, 'reservedIpRanges': [], 'dnsNameservers': 'upstream_dns', 'dhcpHandling': 'Run a DHCP server', 'dhcpLeaseTime': '1 day', 'dhcpBootOptionsEnabled': False, 'dhcpOptions': [], 'interfaceId': '1', 'networkName': 'NETWORK1'}, {'id': 2, 'networkId': 'L_2222', 'name': 'VLAN2', 'applianceIp': '2.2.2.2', 'subnet': '2.2.2.0/24', 'fixedIpAssignments': {}, 'reservedIpRanges': [], 'dnsNameservers': 'upstream_dns', 'dhcpHandling': 'Do not respond to DHCP requests', 'interfaceId': '2', 'networkName': 'NETWORK2'}]] # 提取内层实际存储VLAN条目的列表 vlan_records = raw_data[0] # 构造DataFrame时显式指定需要保留的核心字段 target_columns = ['id', 'networkId', 'name', 'applianceIp', 'subnet'] df = pd.DataFrame(vlan_records, columns=target_columns) # 导出CSV,关闭默认行号索引 df.to_csv('vlan_output.csv', index=False)
导出效果
最终生成的CSV文件内容如下,完全匹配需求:
id,networkId,name,applianceIp,subnet 1,L_1111,VLAN1,1.1.1.1,1.1.1.0/24 2,L_2222,VLAN2,2.2.2.2,2.2.2.0/24
你给出的空格分隔对齐效果是纯文本排版展示样式,标准CSV默认用逗号做分隔符,用任意表格工具打开都会自动按列对齐成你要的排版。如果确实需要纯空格分隔的文本文件,在
to_csv中增加参数sep=' '即可。
补充说明
- 不需要提前手动清理空字典、空列表类的冗余字段:只要显式传入
columns参数指定目标列,pandas会自动忽略所有非指定字段,不受字段值类型影响。 - 如果原始数据包含多个同结构的内层子列表(比如多组VLAN分不同子列表存储),可以先平铺合并所有记录再处理:
vlan_records = [entry for sub_list in raw_data for entry in sub_list],后续逻辑不变。
内容的提问来源于stack exchange,提问作者Walter Joel Solano
相关产品推荐
相关产品推荐

