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
相关产品推荐
相关产品推荐

