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

Python:如何将列表中同组单键字典合并为完整字典?

如何将拆分的字典列表合并为按组的完整字典列表?

问题描述

原始输入字典列表:

[{'id': '1'},
 {'name': 'test'},
 {'email': 'test@gmail.com'},
 {'id': '2'},
 {'name': 'supra'},
 {'email': 'supra@gmail.com'},
 {'id': '3'},
 {'name': 'gtr'},
 {'email': 'gtr@gmail.com'}]

期望将每3个关联字典(id/name/email)合并为一个完整字典,得到结果:

data_list = [{"id":"1", "name":"test", "email":"test@gmail.com"},
             {"id":"2", "name":"supra", "email":"supra@gmail.com"},
             {"id":"3", "name":"gtr", "email":"gtr@gmail.com"}]

尝试了以下代码,但因键重复覆盖,仅保留最后一组数据:

v = [{k: v for d in data_list for k, v in d.items()}]

解决方案

原始数据按id-name-email的固定顺序每3个为一组,可按步长3遍历列表,将每组内的字典合并:

方法1:循环遍历合并

data_list = [{'id': '1'},
 {'name': 'test'},
 {'email': 'test@gmail.com'},
 {'id': '2'},
 {'name': 'supra'},
 {'email': 'supra@gmail.com'},
 {'id': '3'},
 {'name': 'gtr'},
 {'email': 'gtr@gmail.com'}]

result = []
# 按步长3分组遍历
for i in range(0, len(data_list), 3):
    merged = {}
    # 合并当前组内的所有字典
    for d in data_list[i:i+3]:
        merged.update(d)
    result.append(merged)

print(result)

方法2:列表推导式简化

用字典解包直接合并每组的3个字典:

result = [{**data_list[i], **data_list[i+1], **data_list[i+2]} 
          for i in range(0, len(data_list), 3)]

或者用生成器表达式构建合并字典:

result = [dict(item for sub_dict in data_list[i:i+3] for item in sub_dict.items()) 
          for i in range(0, len(data_list), 3)]

原代码问题分析

你之前的代码将所有字典的键值对一次性合并到同一个字典中,由于字典键的唯一性,后面的id/name/email会覆盖前面的同名键,最终只保留最后一组的数据,且结果是单个字典组成的列表,不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:35:17