【问题标题】:using lambda to sort author names by surname使用 lambda 按姓氏对作者姓名进行排序
【发布时间】:2019-12-11 10:47:21
【问题描述】:

我得到了一个随机顺序的作者列表。 我需要删除他们姓名前的数字,然后按姓氏字母顺序打印姓名。

我可以按姓氏对它们进行排序,但是当有多个作者时会出现问题,不,我不能写 et al,我不能更改给定作者字符串的任何内容。

比如“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)

【问题讨论】:

  • ','分割,使用返回的第一项,使用' '分割,使用最后一项...?
  • @deceze 你是什么意思?
  • authors.sort(key=lambda name: name.split(',')[0].split(" ")[-1].lower())
  • deceze 的意思是:name.split(",")[0].split(" ")[-1] - 第一次拆分总是至少有一个元素(没有, 的字符串将只返回一个包含原始字符串的列表)。
  • 啊,谢谢,简单的数组排序?

标签: python python-3.x sorting lambda


【解决方案1】:

这是一个可能的解决方案:

out = sorted(inp, key=lambda authors: "".join(a.split()[-1] for a in authors.split(",")))

例如,给定输入inp

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

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"]

基本上,您只需按姓氏的串联对作者进行排序。

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 1970-01-01
    • 2019-05-06
    • 2010-10-26
    • 2015-07-08
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多