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

如何将字典列表中相同class值的条目进行roll值分组合并

按class分组合并roll列表的实现方法

给定如下字典列表数据(其中roll值均唯一,class值可重复):

original_list = [
    {'roll':101 , 'class':10},
    {'roll':102 , 'class':10},
    {'roll':103 , 'class':10},
    {'roll':104 , 'class':11},
    {'roll':105 , 'class':11},
    {'roll':106 , 'class':11},
    {'roll':107 , 'class':12},
    {'roll':108 , 'class':12},
    {'roll':109 , 'class':12}
]

需要将其转换为以下格式,按class分组,将同组的roll值合并为列表:

new_list = [
    {'roll':[101,102,103] , 'class':10},
    {'roll':[104,105,106] , 'class':11},
    {'roll':[107,108,109] , 'class':12}
]

以下是几种可行的实现方法:

方法一:基础字典分组(无依赖)

通过遍历原始列表,用class作为键收集对应的roll值,最后转换为目标格式:

original_list = [
    {'roll':101 , 'class':10},
    {'roll':102 , 'class':10},
    {'roll':103 , 'class':10},
    {'roll':104 , 'class':11},
    {'roll':105 , 'class':11},
    {'roll':106 , 'class':11},
    {'roll':107 , 'class':12},
    {'roll':108 , 'class':12},
    {'roll':109 , 'class':12}
]

# 分组收集roll数据
grouped_data = {}
for item in original_list:
    cls = item['class']
    roll = item['roll']
    if cls not in grouped_data:
        grouped_data[cls] = []
    grouped_data[cls].append(roll)

# 转换为目标字典列表
new_list = [{'roll': rolls, 'class': cls} for cls, rolls in grouped_data.items()]
print(new_list)

该方法逻辑直观,无需额外依赖,适合小数据量场景。

方法二:使用标准库itertools.groupby

利用itertools.groupby按class分组,注意需先将原始列表按class排序(groupby仅对连续相同键的元素分组):

from itertools import groupby

original_list = [
    {'roll':101 , 'class':10},
    {'roll':102 , 'class':10},
    {'roll':103 , 'class':10},
    {'roll':104 , 'class':11},
    {'roll':105 , 'class':11},
    {'roll':106 , 'class':11},
    {'roll':107 , 'class':12},
    {'roll':108 , 'class':12},
    {'roll':109 , 'class':12}
]

# 按class排序(若原始数据已按class有序可省略此步骤)
sorted_list = sorted(original_list, key=lambda x: x['class'])

# 分组并生成目标列表
new_list = []
for cls, group in groupby(sorted_list, key=lambda x: x['class']):
    roll_list = [item['roll'] for item in group]
    new_list.append({'roll': roll_list, 'class': cls})

print(new_list)

该方法借助标准库工具简化代码,适合有序或可排序的数据场景。

方法三:使用pandas处理大数据量

若数据量较大,pandas的分组聚合功能效率更高,同时支持更多扩展操作:

import pandas as pd

original_list = [
    {'roll':101 , 'class':10},
    {'roll':102 , 'class':10},
    {'roll':103 , 'class':10},
    {'roll':104 , 'class':11},
    {'roll':105 , 'class':11},
    {'roll':106 , 'class':11},
    {'roll':107 , 'class':12},
    {'roll':108 , 'class':12},
    {'roll':109 , 'class':12}
]

# 转换为DataFrame
df = pd.DataFrame(original_list)
# 按class分组,聚合roll为列表
grouped_df = df.groupby('class')['roll'].agg(list).reset_index()
# 转换为字典列表
new_list = grouped_df.to_dict('records')

print(new_list)

该方法适合大规模数据集,且能结合pandas的其他数据处理能力完成复杂需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:40:24