2013-10-10 86 views
2

我在一個列表中有數千個列表。在列表中對列表排序

成千上萬個列表中的每一個都包含[姓名,性別,年齡],姓名和性別爲str,年齡爲int。

我想根據年齡對所有列表進行排序是降序。

我該怎麼辦呢?

+0

有你看了'list.sort的文檔()'方法(特別是'鍵'參數)? – Blender

+0

請注意,我爲'python sort'獲得的第一個Google結果是關於該主題的官方[howto](https://wiki.python.org/moin/HowTo/Sorting/)的鏈接,其中包括一些類似的例子。 – DSM

回答

6

list.sort允許您指定一個,它基本上是排序列表時用於列表中每個項目的東西。該鍵是一個以該項目爲參數的函數。默認情況下,它是標識,因此它總是返回原始對象,但是您可以通過指定不同的函數輕鬆更改該標識。

在你的情況,你將要在內部列表返回第3項:

biglist.sort(key=lambda x: x[2]) 

請注意,這不會指定一個很好的排序,當年齡不是唯一的(他們通常不是)。因此,您可能希望使用名稱指定第二個目的,例如:

biglist.sort(key=lambda x: (x[2], x[0]), reverse=True) 

biglist.sort(key=lambda x: (x[2], x[0])) 

爲了得到一個從大到小的順序,你將不得不在排序調用還設置reverse=True

注意,這樣做也會影響名字的順序,所以你會得到一個下降的年齡的名字。如果你不想這樣做,你可以對列表進行兩次排序(分別命名,然後按年齡遞減),或者你可以欺騙一下:你可以假設沒有活人會超過200歲 - 或者說1000是超級安全的,所以,你可以通過1000-age排序上升獲得降序排序上age

biglist.sort(key=lambda x: (1000 - x[2], x[0])) 
+1

或者,而不是那個技巧 - 只是'-x [2]'所以它被否定 –

+0

@JonClements哦,是的。這也適用於xD – poke

1
import operator 
myBigList.sort(key=operator.itemgetter(2), reverse=True)