如何按字符串中的第二个单词按字母顺序对列表进行排序

时间:2013-12-08 22:27:45

标签: python list sorting

如果我有一个列表并且我想继续添加行并按姓氏的字母顺序排序,那怎么办呢? 排序似乎只是通过字符串的第一个字母重新排列它们。

    line = "James Edward"   #Example line
    linesList.append("".join(line))   #Add it to a list
    linesList = sorted(linesList)   #Sort alphabetically

4 个答案:

答案 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']
>>>

此外,如果您需要,请参阅key上的参考,lambda上的参考。

答案 3 :(得分:0)

如果您有threen个名称,并且您希望按姓名的最后一部分对其进行排序:

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