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

Python如何检查嵌套字典键与列表匹配,按指定顺序导出CSV

实现思路
  • 第一步先区分字段归属:指定字段列表里_id、count是外层字典的公共字段,每一条account子记录都会复用这两个字段的值,剩下的字段都来自嵌套的account列表的子字典。
  • 第二步双层遍历数据:先遍历外层每个字典,取出公共字段的值,再遍历对应字典下的account列表的每个子项。
  • 第三步按指定顺序补全字段:逐个匹配指定字段列表的键名,公共字段直接取外层预存的值,account私有字段用dict.get()方法取值,不存在就默认返回N/A,自动忽略字段顺序错乱的问题。
  • 第四步将整理好的行批量写入CSV文件即可。
代码实现
import csv

# 指定输出字段顺序
field_order = ["_id", "count", "f_name", "l_name", "number", "country"]

# 原始数据(已修正示例中的语法错误)
raw_data = [
    {
        "_id": 123,
        "count": 345,
        "account": [
            {
                "f_name": "Adam",
                "l_name": "Adamson",
                "number": 1,
                "country": "Argentina"
            },
            {
                "l_name": "Charlson",
                "country": "Canada"
            },
            {
                "f_name": "David",
                "country": "Denmark",
                "number": 3,
                "l_name": "Davidson"
            },
        ]
    },
    {
        "_id": 678,
        "count": 981,
        "account": [
            {
                "f_name": "Edvin",
                "number": 4,
                "country": "Equador"
            },
        ]
    }
]

# 存储整理后的所有行
output_rows = [field_order]

for outer_item in raw_data:
    # 先取外层公共字段的值,不存在就补N/A
    current_id = outer_item.get("_id", "N/A")
    current_count = outer_item.get("count", "N/A")
    # 遍历嵌套的account列表,处理每一条子记录
    for account_item in outer_item.get("account", []):
        current_row = []
        # 严格按照指定字段顺序取值
        for field in field_order:
            if field == "_id":
                current_row.append(str(current_id))
            elif field == "count":
                current_row.append(str(current_count))
            else:
                current_row.append(str(account_item.get(field, "N/A")))
        output_rows.append(current_row)

# 写入CSV文件
with open("output.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(output_rows)

# 如需打印示例中竖线分隔的预览效果,可使用下方代码
# col_width = 8
# for row in output_rows:
#     print("|".join(str(item).ljust(col_width) for item in row))
#     print("-" * (col_width * len(field_order) + len(field_order) - 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:30:00