2012-12-04 121 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à!