You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从不规则/不一致的字典列表生成CSV文件?

处理不规则字典列表生成统一CSV的方案

需求:有一组键不统一的字典列表,需要生成包含所有字典数据的CSV文件,遍历过程中遇到新键就创建对应的新列。

示例

输入字典列表:

input = [{"name": "John"}, {"name": "Bob", "age":"55"}, {"age": "43"}, {"name": "Phil", "age": "60", "job": "Builder"}]

预期输出CSV(表格形式):

nameagejob
John
Bob55
43
Phil60Builder

现有尝试代码

提取所有列名(fieldnames)

def extract_fields(raw_data):
    fields = []
    for i in raw_data:
        for j in i.keys():
            if j not in fields:
                fields.append(j)
    return fields

写入CSV文件

def export_csv(input, fields):
    with open('mycsvfile.csv', 'w') as f:
            w = csv.DictWriter(f, fields)
            w.writeheader()
            w.writerows(input)

疑问:不确定writerows函数能否将字典键值正确映射到对应列。

解答

你的思路完全可行,csv.DictWriter的writerows方法可以自动匹配键与列名:

  • 每个字典中的键会对应到fieldnames里的列,值会写入对应单元格;
  • 如果某个字典缺少fieldnames中的键,该列对应的单元格会自动留空,完全符合需求。

优化建议

可以优化extract_fields函数,用更高效的方式去重并可选保留键的首次出现顺序:

def extract_fields(raw_data):
    # 保留键首次出现的顺序(Python3.7+适用,利用字典有序特性)
    fields = {}
    for item in raw_data:
        fields.update({key: None for key in item.keys()})
    return list(fields.keys())

如果不需要顺序,用集合去重效率更高:

def extract_fields(raw_data):
    fields = set()
    for item in raw_data:
        fields.update(item.keys())
    return list(fields)

完整可运行代码

import csv

def extract_fields(raw_data):
    fields = {}
    for item in raw_data:
        fields.update({key: None for key in item.keys()})
    return list(fields.keys())

def export_csv(input_data, fields):
    # 添加newline=''避免CSV空行,指定utf-8编码兼容特殊字符
    with open('mycsvfile.csv', 'w', newline='', encoding='utf-8') as f:
        w = csv.DictWriter(f, fields)
        w.writeheader()
        w.writerows(input_data)

# 测试调用
input_data = [{"name": "John"}, {"name": "Bob", "age":"55"}, {"age": "43"}, {"name": "Phil", "age": "60", "job": "Builder"}]
all_fields = extract_fields(input_data)
export_csv(input_data, all_fields)

内容的提问来源于stack exchange,提问作者vile_goat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 08:55:21