2012-12-04 135 views
0

所以我有这个列表,我们将它称为l​​istA。我试图让每个列表中的[3]项目['5.01','5.88','2.10','9.45','17.58','2.76']按排序顺序。所以最终的结果会在顶部与圣诞老人重新开始整个列表。这有任何意义吗?在Python中对数字进行排序

[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]

+0

使用操作员模块中的itemgetter()。它并不是很清楚,但它的目的就是为了做到你想要的。它比lambda更容易阅读,并且实现起来非常简单。 –

+0

@MichaelDavidWatson,不幸的是itemgetter不会帮助用数字排序字符串。 –

+0

是的。但是,从Google寻找一个类似的解决方案,其中的值已经是float/int –

回答

5

如果你想返回有序的完整列表,这可能工作。这需要输入列表并在其上运行sorted。所述reverse参数设置为True排序反向(降序)的顺序列表,并且key参数指定通过该排序的方法中,在这种情况下是每个列表的第三个参数的float

In [5]: l = [['John Doe', u'25.78', u'20.77', '5.01'] # continues...  
In [6]: sorted(l, reverse=True, key=lambda x: float(x[3])) 
Out[6]: 
[['Santa', u'31.13', u'13.55', '17.58'], 
['Michael Jordan', u'28.50', u'19.05', '9.45'], 
['Jane Doe', u'21.08', u'15.20', '5.88'], 
['John Doe', u'25.78', u'20.77', '5.01'], 
['Easter Bunny', u'17.20', u'14.44', '2.76'], 
['James Bond', u'20.57', u'18.47', '2.10']] 

如果你只需要排序顺序的值,其他答案提供了可行的方法。

2

试试这个:

>>> listA=[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']] 

>>> [x[3] for x in sorted(listA, reverse = True, key = lambda i : float(i[3]))] 
['17.58', '9.45', '5.88', '5.01', '2.76', '2.10'] 
0
from operator import itemgetter 
lstA.sort(reverse = True, key = itemgetter(3)) 

,你是好去。当您有多个索引进行排序时,在排序中使用itemgetter()非常有用。假设你想按照字母顺序排列第一个值,以便在以下情况下可以执行以下操作

from operator import itemgetter 
lstA.sort(key = itemgetter(0)) 
lstA.sort(reverse = True, key = itemgetter(3)) 

和Voilà!