如何按最高编号对列表进行排序?

时间:2015-05-06 12:02:11

标签: python list sorting

这是我的清单:

[['Alfred Jeffries', '9'], ['Peter Smalls', '10'], ['Bob Daniels', '8']]

我想用数字排序,从最高到最低。

预期结果:

[['Peter Smalls', '10'], ['Alfred Jeffries', '9'], ['Bob Daniels', '8']]

谢谢!

2 个答案:

答案 0 :(得分:7)

使用key指定一个参数的函数,该函数用于从每个列表元素中提取比较键。参数reverse是一个布尔值。如果设置为True,则对列表元素进行排序,就好像每个比较都已反转一样。

>>> l = [['Alfred Jeffries', '9'], ['Peter Smalls', '10'], ['Bob Daniels', '8']]
>>> sorted(l, key=lambda x: int(x[1]), reverse=True)
[['Peter Smalls', '10'], ['Alfred Jeffries', '9'], ['Bob Daniels', '8']]

答案 1 :(得分:1)

这个问题已经得到了一个优雅的答案,但我想用itemgetter来做。

如果列表中有数字而不是strings('9','8','10') 它会容易得多

 In [7]: a=[['Alfred Jeffries', 9], ['Peter Smalls', 10], ['Bob Daniels', 8]]

In [8]: sorted(a,key=itemgetter(1), reverse=True)
Out[8]: [['Peter Smalls', 10], ['Alfred Jeffries', 9], ['Bob Daniels', 8]]

因为有字符串我需要使用列表理解。

from operator import itemgetter
a=[['Alfred Jeffries', '9'], ['Peter Smalls', '10'], ['Bob Daniels', '8']]

k=[[i[0],str(i[1])] for i in sorted([[elem[0],int(elem[1])] for elem in a],key=itemgetter(1), reverse=True)]

输出

 [['Peter Smalls', '10'], ['Alfred Jeffries', '9'], ['Bob Daniels', '8']]