按person_id和detail_info首元素合并字典列表并累加次元素的方法
字典列表按规则合并实现
需求说明
给定待处理字典列表:
[{'person_id': '10114', 'detail_info': [1286, 1]}, {'person_id': '10114', 'detail_info': [1286, 1]}, {'person_id': '10114', 'detail_info': [1286, 3]}]
需按照以下规则合并得到结果:
- 合并维度:相同
person_id且detail_info第一个元素相等的条目归为同一组 - 合并规则:同组内对每个
detail_info的第二个元素进行累加 - 最终输出合并后的字典列表,预期结果如下:
[{'person_id': '10114', 'detail_info': [1286, 5]}]
实现代码
def merge_records(origin_list): # 用元组作为分组键存储累加结果 temp = {} for item in origin_list: pid = item["person_id"] d1, d2 = item["detail_info"] key = (pid, d1) temp[key] = temp.get(key, 0) + d2 # 转换为目标格式 return [{"person_id": k[0], "detail_info": [k[1], v]} for k, v in temp.items()] # 测试调用 input_data = [{'person_id': '10114', 'detail_info': [1286, 1]}, {'person_id': '10114', 'detail_info': [1286, 1]}, {'person_id': '10114', 'detail_info': [1286, 3]}] print(merge_records(input_data))
代码说明
- 首先通过字典做分组聚合,以
(person_id, detail_info第一个元素)的元组作为唯一键,累加对应第二个元素的数值 - 遍历完成后将字典的键值对转换为要求的字典结构,最终返回合并后的列表
- 该方法时间复杂度为O(n),仅需遍历一次原列表,性能表现较好
内容的提问来源于stack exchange,提问作者Vegas
相关产品推荐
相关产品推荐

