如何高效合并Python中同id的字典列表元素
按ID合并字典列表的高效循环实现
嘿,这个需求在日常数据处理里挺常见的!用循环实现的话,咱们可以靠一个临时字典来快速聚合相同ID的键值对,这样能保证效率是线性的——毕竟每个元素只需要遍历一次,这已经是循环方案里的最优表现啦。
直接上代码,再给你拆解逻辑:
values = [{'id':1, 'x':2}, {'id':1, 'y':4}, {'id':1, 'z':6}, {'id':2, 'j':5}, {'id':2, 'k':10}, {'id':3, 'w':1}, {'id':3, 'x':3}, {'id':3, 'y':5}, {'id':3, 'z':7}] # 用临时字典存分组结果:key是id,value是合并后的完整字典 merged_groups = {} for item in values: current_id = item['id'] # 如果这个ID还没在分组里,先初始化一个带ID的空字典 if current_id not in merged_groups: merged_groups[current_id] = {'id': current_id} # 把当前item的所有键值对合并到对应分组里 merged_groups[current_id].update(item) # 把字典的values转成列表,就是最终想要的结果 final_result = list(merged_groups.values()) print(final_result)
为啥这个方法效率高?
- 全程只遍历原列表一次,时间复杂度是O(n)(n是原列表元素总数),这是循环能做到的最优效率了。
- 字典的
in判断和update操作平均都是O(1)的时间开销,不会拖慢整体速度。 - 最后转列表的操作只处理不同ID的分组,开销远小于遍历原列表。
小补充
如果原列表里同一个ID下不会出现重复的键(比如不会有两个{'id':1, 'x':3}这种条目),那这个方案完全没问题;要是有重复键,后面的条目会覆盖前面的,这也是常规合并逻辑里的默认行为哦。
内容的提问来源于stack exchange,提问作者nhtgca
相关产品推荐
相关产品推荐

