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

Python实现列表字典指定字段扁平化并保留id与slug字段

如何扁平化嵌套的Python字典列表并保留外层字段

我明白你的需求——你已经把JSON转成了包含嵌套campaigns列表的Python字典集合,想要把每个campaign条目单独拆出来,同时给每个条目带上外层的id和slug字段。我们可以用更直接的方式实现这个需求,比你之前尝试的方法更贴合目标。

先明确你的输入和期望输出:

原始输入数据

data = [
    {'id': 8675309, 'slug': 'name', 'campaigns': [
        {'part_id': 'sfgsdfgsd', 'client_id': '1sdfgsdfg', 'business_id': None, 'metadata': {'field':1}},
        {'part_id': '354yyr', 'client_id': 'erty465', 'business_id': None, 'metadata': {'field':10} }
    ]},
    {'id': 1234567, 'slug': 'name2', 'campaigns': [
        {'part_id': 'wertyw', 'client_id': 'sighs', 'business_id': None, 'metadata': {'field':1}}
    ]}
]

期望输出结果

[
    {'id': 8675309, 'slug': 'name', 'part_id': 'sfgsdfgsd', 'client_id': '1sdfgsdfg', 'business_id': None},
    {'id': 8675309, 'slug': 'name', 'part_id': '354yyr', 'client_id': 'erty465', 'business_id': None},
    {'id': 1234567, 'slug': 'name2', 'part_id': 'wertyw', 'client_id': 'sighs', 'business_id': None}
]

解决方案代码

我们可以用嵌套列表推导式一次性完成操作,同时自动过滤掉不需要的metadata字段(如果需要保留,直接在新字典里添加对应字段即可):

flattened_data = [
    {
        'id': item['id'],
        'slug': item['slug'],
        'part_id': camp['part_id'],
        'client_id': camp['client_id'],
        'business_id': camp['business_id']
    }
    for item in data
    for camp in item['campaigns']
]

代码解释

  1. 外层循环for item in data:遍历原始列表中的每个顶层字典(包含id、slug和campaigns的条目)
  2. 内层循环for camp in item['campaigns']:遍历当前顶层字典里的每个campaign子条目
  3. 对每个camp,我们把顶层的id、slug和camp里的目标字段组合成新字典
  4. 所有新字典会被自动收集到flattened_data列表中,正好匹配你想要的结果

如果你觉得列表推导式不够直观,也可以用普通循环写法,逻辑完全一致:

flattened_data = []
for item in data:
    # 先提取外层的固定字段
    outer_id = item['id']
    outer_slug = item['slug']
    # 遍历每个campaign条目,组合成新字典
    for camp in item['campaigns']:
        flattened_entry = {
            'id': outer_id,
            'slug': outer_slug,
            'part_id': camp['part_id'],
            'client_id': camp['client_id'],
            'business_id': camp['business_id']
        }
        flattened_data.append(flattened_entry)

两种写法都能得到你需要的扁平化结果,选哪种就看你觉得哪种更易读啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:34:08