使用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
相关产品推荐
相关产品推荐

