Python 使用lambda按姓氏对作者姓名进行排序
我得到了一份按随机顺序排列的作者名单。 我需要删除他们姓名前的数字,然后按姓氏按字母顺序打印姓名 我可以按姓氏对它们进行排序,但当有多个作者时会出现问题,不,我不能写等等,我不能更改给定作者字符串的任何内容 例如,它不能对J.W.Han,M.Kamber进行排序,因为有两位作者,它只需要读取第一作者的姓氏就可以按字母顺序进行排序 以下是我目前掌握的情况:Python 使用lambda按姓氏对作者姓名进行排序,python,python-3.x,sorting,lambda,Python,Python 3.x,Sorting,Lambda,我得到了一份按随机顺序排列的作者名单。 我需要删除他们姓名前的数字,然后按姓氏按字母顺序打印姓名 我可以按姓氏对它们进行排序,但当有多个作者时会出现问题,不,我不能写等等,我不能更改给定作者字符串的任何内容 例如,它不能对J.W.Han,M.Kamber进行排序,因为有两位作者,它只需要读取第一作者的姓氏就可以按字母顺序进行排序 以下是我目前掌握的情况: authors = ["X. F. Li", "S. H. Lu", "X. A. Wang", "J. W. Han, M. Kamber"
authors = ["X. F. Li", "S. H. Lu", "X. A. Wang", "J. W. Han, M. Kamber", "S. Oyama, T. Ishida", "S. Haykin", "V. Vapnik", "A. Ragel, B. Cremilleux", "S. W. Zhu, W. Wong, D. B. Zhang, Y. Xiao, X. J. Chen"]
authors.sort(key=lambda name: name.split(" ")[-1].lower())
print(authors)
以下是一个可能的解决方案:
out = sorted(inp, key=lambda authors: "".join(a.split()[-1] for a in authors.split(",")))
例如,给定输入inp
输出为
基本上,您只需按照作者姓氏的串联顺序对其排序。按“,”拆分,使用返回的第一项,按“”拆分,使用最后一项…?@deceze您的意思是什么?authors.sortkey=lambda name:name.Split”,“[0]。Split[-1]。lower deceze的意思是:name.Split,[0]。Split[-1]-第一次拆分将始终至少有一个元素字符串没有,将返回一个仅包含原始字符串的列表。啊,谢谢,简单数组排序?
inp = ["X. F. Li",
"S. H. Lu",
"X. A. Wang",
"X. A. Wang, S. H. Lu",
"S. H. Lu, X. A. Wang",
"S. H. Lu, S. W. Zhu"]
out = ["X. F. Li",
"S. H. Lu",
"S. H. Lu, X. A. Wang",
"S. H. Lu, S. W. Zhu",
"X. A. Wang",
"X. A. Wang, S. H. Lu"]