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

使用usort函数按大学分组排序并输出标签的技术问询

解决按大学分组输出标签的问题

嘿,这个分组输出的问题其实很好解决!你已经完成了排序这关键一步,接下来只需要把相同大学的条目归到一起,再按要求格式输出就行。我给你举几个常用语言的实现例子,你可以参考下:

用Python实现

首先,我们需要先确保列表按大学名称排序(因为itertools.groupby需要连续的相同键才能正确分组),然后提取每个标签里的大学名作为分组依据,最后遍历每个分组输出即可:

from itertools import groupby

# 假设你的已排序列表是这样的(如果还没按大学排序,先执行排序步骤)
people = [
    "Alice Smith (Harvard)",
    "Bob Jones (MIT)",
    "Charlie Brown (Harvard)",
    "Diana Lee (Stanford)",
    "Evan Wilson (MIT)"
]

# 定义提取大学名称的函数:从括号中取出内容
def get_university(person):
    return person.split("(")[-1].rstrip(")")

# 先按大学名称排序(如果你的列表已经按大学排好序,这步可以跳过)
sorted_people = sorted(people, key=get_university)

# 分组并按要求格式输出
for university, group in groupby(sorted_people, key=get_university):
    print(f"{university}: {' '.join(group)}")

运行后输出结果:

Harvard: Alice Smith (Harvard) Charlie Brown (Harvard)
MIT: Bob Jones (MIT) Evan Wilson (MIT)
Stanford: Diana Lee (Stanford)

用JavaScript实现

如果是前端场景,我们可以用reduce方法来构建分组对象,再遍历输出:

const people = [
    "Alice Smith (Harvard)",
    "Bob Jones (MIT)",
    "Charlie Brown (Harvard)",
    "Diana Lee (Stanford)",
    "Evan Wilson (MIT)"
];

// 提取大学名称:用正则匹配括号内的内容
const getUniversity = person => person.match(/\((.*?)\)/)[1];

// 构建分组对象:key是大学名,value是对应标签数组
const groupedPeople = people.reduce((acc, person) => {
    const uni = getUniversity(person);
    acc[uni] = acc[uni] || [];
    acc[uni].push(person);
    return acc;
}, {});

// 按要求格式输出
for (const university in groupedPeople) {
    console.log(`${university}: ${groupedPeople[university].join(' ')}`);
}

关键注意点

  • 提取大学名的逻辑要匹配你的标签格式:因为你的标签是固定的Firstname Lastname (University),所以用字符串分割或正则匹配都能准确拿到大学名。
  • 如果用groupby类的方法,必须先按分组键排序,否则相同大学的条目如果不连续,会被分成多个独立分组哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:52:05