Python如何将同id的多个字典键值合并为单个字典
同ID字典项合并实现方法
不用找特殊工具,Python标准库就能快速实现这个需求,核心逻辑是按id字段分组,再把同组下name子字典的键值对合并到一起就行,不需要额外安装第三方包。
标准库实现(无依赖,兼容性最好)
from collections import defaultdict def merge_same_id_dict(input_list): id_map = defaultdict(dict) for single_item in input_list: # 按id归组,合并name下的所有键值 id_map[single_item['id']].update(single_item['name']) # 转成你要的列表结构输出 return [{"id": item_id, "name": name_info} for item_id, name_info in id_map.items()] # 测试调用 list_1 = [{'id': '123', 'name': {'new': 'kevin'}}, {'id': '123', 'name': {'old': 'alan'}}, {'id': '456', 'name': {'new': 'jason'}}, {'id': '456', 'name': {'old': 'jack'}}] output = merge_same_id_dict(list_1)
运行后output的内容和你预期完全一致:
[ {'id': '123', 'name': {'new': 'kevin', 'old': 'alan'}}, {'id': '456', 'name': {'new': 'jason', 'old': 'jack'}} ]
说明
- 这个写法时间复杂度是O(n),只需要遍历一次原列表,哪怕列表里有上万条数据性能也足够
- 兼容性覆盖Python3全版本,如果后续除了
name之外还有其他需要合并的子字典字段,直接在循环里对应加update逻辑即可,改造成本很低
如果你日常数据处理已经装了pandas,还可以写得更短
import pandas as pd output = (pd.DataFrame(list_1) .groupby('id')['name'] .apply(lambda x: {k:v for d in x for k,v in d.items()}) .reset_index() .to_dict('records'))
运行结果和上面完全一致,适合已经在做数据分析场景的情况用。
内容的提问来源于stack exchange,提问作者rookie
相关产品推荐
相关产品推荐

