Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用lambda按姓氏对作者姓名进行排序_Python_Python 3.x_Sorting_Lambda - Fatal编程技术网

Python 使用lambda按姓氏对作者姓名进行排序

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"

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

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

例如,它不能对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"]