2015-05-06 65 views
1

这是我的名单:如何按最高数字对列表进行排序?

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

我想通过数字来排序,这一点,从最高到最低。

预期成果:

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

谢谢!

+0

对不起,忘了补充一点,我使用python。 – jordan112

回答

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

这个问题已经得到了一个优雅的答案,但我想用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']] 
相关问题