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

如何将含共同键值对的字典列表转换为以共同值为键的新字典?

按共同键分组字典列表生成新字典

问题

给定一个包含多个字典的列表,所有字典都包含共同键id,需要将列表中的字典按id分组,生成以id为键、对应值为包含details列表的字典的新结构。

原始列表:

original_list =  [
    {"local_id":1,"id":29,"name":"Ashish"},
    {"local_id":2,"id":29,"name":"Boora"},
    {"local_id":3,"id":30,"name":"Harshdeep"},
    {"local_id":4,"id":30,"name":"Singh"},
    {"local_id":5,"id":31,"name":"Deepak"}  
]

期望结果:

result_dict = {
    29:{'details':[{"local_id":1,"id":29,"name":"Ashish"},{"local_id":2,"id":29,"name":"Boora"}]},
    30:{'details':[{"local_id":3,"id":30,"name":"Harshdeep"},{"local_id":4,"id":30,"name":"Singh"}]},
    31:{'details':[{"local_id":5,"id":31,"name":"Deepak"}]} 
}

解决方案

方法1:基础遍历构建

直接遍历原始列表,逐个将元素添加到对应分组中:

original_list =  [
    {"local_id":1,"id":29,"name":"Ashish"},
    {"local_id":2,"id":29,"name":"Boora"},
    {"local_id":3,"id":30,"name":"Harshdeep"},
    {"local_id":4,"id":30,"name":"Singh"},
    {"local_id":5,"id":31,"name":"Deepak"}  
]

result_dict = {}
for item in original_list:
    id_key = item["id"]
    if id_key not in result_dict:
        result_dict[id_key] = {"details": []}
    result_dict[id_key]["details"].append(item)

print(result_dict)

方法2:使用collections.defaultdict简化

借助defaultdict自动生成默认结构,减少判断逻辑:

from collections import defaultdict

original_list =  [
    {"local_id":1,"id":29,"name":"Ashish"},
    {"local_id":2,"id":29,"name":"Boora"},
    {"local_id":3,"id":30,"name":"Harshdeep"},
    {"local_id":4,"id":30,"name":"Singh"},
    {"local_id":5,"id":31,"name":"Deepak"}  
]

result_dict = defaultdict(lambda: {"details": []})
for item in original_list:
    result_dict[item["id"]]["details"].append(item)

# 可选:转换为普通字典
result_dict = dict(result_dict)

print(result_dict)

方法3:使用itertools.groupby(需先排序)

利用groupby对排序后的列表分组,适合需要分组后做其他处理的场景:

from itertools import groupby

original_list =  [
    {"local_id":1,"id":29,"name":"Ashish"},
    {"local_id":2,"id":29,"name":"Boora"},
    {"local_id":3,"id":30,"name":"Harshdeep"},
    {"local_id":4,"id":30,"name":"Singh"},
    {"local_id":5,"id":31,"name":"Deepak"}  
]

# 先按id排序,确保相同id的元素连续
sorted_list = sorted(original_list, key=lambda x: x["id"])
result_dict = {
    key: {"details": list(group)} 
    for key, group in groupby(sorted_list, key=lambda x: x["id"])
}

print(result_dict)

内容的提问来源于stack exchange,提问作者Ashish Boora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:50:23