如果我有一个列表并且我想继续添加行并按姓氏的字母顺序排序,那怎么办呢? 排序似乎只是通过字符串的第一个字母重新排列它们。
line = "James Edward" #Example line
linesList.append("".join(line)) #Add it to a list
linesList = sorted(linesList) #Sort alphabetically
答案 0 :(得分:11)
linesList.sort(key=lambda s: s.split()[1])
更多信息:https://wiki.python.org/moin/HowTo/Sorting#Key_Functions
答案 1 :(得分:4)
如果您想要完全正确的字母顺序(当姓氏相同时按名字排序),您可以利用Python排序稳定的事实。如果您首先按默认键排序:
lst.sort()
然后按姓氏排序:
lst.sort(key=lambda n: n.split()[1])
然后具有相同姓氏的条目将以与第一个sort
放入的顺序相同的顺序结束 - 这将是正确的。
您也可以使用sorted
:
linesList = sorted(sorted(linesList), key=lambda n: n.split()[1])
答案 2 :(得分:0)
假设名称采用FirstName<whitespace>LastName
格式,您可以使用sorted
的{{3}}参数:
>>> lst = ['Bob D', 'Bob A', 'Bob C', 'Bob B']
>>> lst = sorted(lst, key=lambda x: x.split()[1])
>>> lst
['Bob A', 'Bob B', 'Bob C', 'Bob D']
>>>
同样的原则适用于list.sort
:
>>> lst = ['Bob D', 'Bob A', 'Bob C', 'Bob B']
>>> lst.sort(key=lambda x: x.split()[1])
>>> lst
['Bob A', 'Bob B', 'Bob C', 'Bob D']
>>>
答案 3 :(得分:0)
如果您有three
或n
个名称,并且您希望按姓名的最后一部分对其进行排序:
names = ["John Mc Karter", "John Oliver", "Max Raiden", "Naruto Ho Uzumaki"]
print(names.sort(key=lambda x:x.split()[-1]))
>>>['John Mc Karter', 'John Oliver', 'Max Raiden', 'Naruto Ho Uzumaki']