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

如何将包含分类与对应id的嵌套列表按分类聚合id生成新列表

聚合分类ID的实现方案

列表推导式本身适合做无状态的逐元素转换或过滤,这种需要累计同分类多个ID的场景,更推荐先用字典做中间存储实现,逻辑更清晰、效率也更高:

# 输入数据
books = [
    ['Health', 18327],
    ['Health', 19438],
    ['Health', 12549],
    ['Health', 11662],
    ['E.R.nurses', 21458],
]

# 聚合逻辑
category_map = {}
for cate, id_val in books:
    # 分类首次出现时初始化列表,第一个元素为分类名
    if cate not in category_map:
        category_map[cate] = [cate]
    # 追加当前ID到对应分类的列表
    category_map[cate].append(id_val)

# 转换为目标输出格式
output = list(category_map.values())

运行后output的结果就是你需要的格式:

[['Health', 18327, 19438, 12549, 11662], ['E.R.nurses', 21458]]

如果你确实需要用列表推导式实现,可以借助itertools.groupby,但要注意groupby要求同分类元素必须相邻,所以需要先对原列表按分类排序:

from itertools import groupby

output = [
    [cate] + [item[1] for item in group]
    for cate, group in groupby(sorted(books, key=lambda x: x[0]), key=lambda x: x[0])
]

两种方案的差异:

  • 字典法时间复杂度为O(n),数据量大时效率更高
  • groupby法多了排序步骤,时间复杂度为O(nlogn),优点是可以写为列表推导式形式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:36:03