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

Python中如何基于连续整数键值对字典列表进行分组

字典列表按连续整数值分组实现方案

需求说明

需要将元素为字典的列表,按照字典中取值为连续整数的键拆分分组,值为连续整数的字典归入同一个子列表。典型场景为NER识别结果的人名实体拆分:同一个人的名、中间名、姓对应的文本位置索引为连续整数,需要归为同一组。

输入示例

lst=[{'name':'sam','class':1},
     {'name':'adam','class':2},
     {'name':'smith','class':3},
     {'name':'john','class':10},
     {'name':'r.','class':11},
     {'name':'doe','class':12}
     ]

期望输出

[[{'name':'sam','class':1},
 {'name':'adam','class':2},
 {'name':'smith','class':3}],
 [{'name':'john','class':10},
 {'name':'r.','class':11},
 {'name':'doe','class':12}]
 ]

实现代码

如果原始列表没有按照分组用的整数键排序,先执行排序(NER输出的实体一般已经按文本出现顺序排列,可跳过这步):

# 按class键升序排序,顺序确定的场景可注释掉这行
lst.sort(key=lambda x: x['class'])

核心分组逻辑:

grouped_result = []
current_group = []
last_val = None

for item in lst:
    current_val = item['class']
    # 初始化第一个分组,或遇到非连续值时新建分组
    if last_val is None or current_val - last_val != 1:
        if current_group:
            grouped_result.append(current_group)
        current_group = [item]
    else:
        # 连续值加入当前分组
        current_group.append(item)
    last_val = current_val

# 追加最后一个未入结果的分组
if current_group:
    grouped_result.append(current_group)

运行后grouped_result就是符合要求的分组结果。

注意事项

  • 排序步骤按需使用:如果数据源本身已经保证整数键按从小到大顺序排列,不需要额外排序,避免打乱原有实体顺序。
  • 逻辑可扩展性强:如果后续分组的键名变更,只需要把代码里取item['class']的部分换成对应的键名即可,不需要修改核心判断逻辑。
  • 适配人名分组场景:NER输出的人名各部分(名、中间名、姓)在文本中连续出现,对应的位置索引差值为1,遇到其他类型实体或者下一个人名时索引会出现跳变,完全匹配该分组逻辑的判断条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 23:09:18