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'] ]
代码解释
- 外层循环
for item in data:遍历原始列表中的每个顶层字典(包含id、slug和campaigns的条目) - 内层循环
for camp in item['campaigns']:遍历当前顶层字典里的每个campaign子条目 - 对每个
camp,我们把顶层的id、slug和camp里的目标字段组合成新字典 - 所有新字典会被自动收集到
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
相关产品推荐
相关产品推荐

