2013-08-19 91 views
0

我需要根據它們所耦合的數字對名稱列表進行排序。我擁有的數據的一個例子是:Python 3.3.2 - 基於數字對名稱列表進行排序

[['Bob Person', 10], ['Josh Winner', 15], ['Jimmy Dexter', 5], ['Mary Goodsprings', 15]] 

正常排序這樣做:

[['Bob Person', 10], ['Jimmy Dexter', 5], ['Josh Winner', 15], ['Mary Goodsprings', 15]] 

排序我要進行,應根據他們再加上數量最多。但是,如果數字相同,那麼它應該使用名稱。就像這樣:

[['Josh Winner', 15], ['Mary Goodsprings', 15], ['Bob Person', 10], ['Jimmy Dexter', 5]] 

注意如何瑪麗和喬希都打成平手,但喬希仍掉前面,因爲Ĵ談到M.

之前,我對如何做到這一點幾乎沒有任何線索,除了事實上我應該使用sort()key功能。

+0

「正常排序」示例中出現錯誤,應更換第一項和第二項 –

回答

6

使用-item[1]以降序排列,與item[0]爲數字相關。

>>> data = [['Bob Person', 10], ['Josh Winner', 15], ['Jimmy Dexter', 5], ['Mary Goodsprings', 15]] 
>>> sorted(data, key=lambda item: (-item[1], item[0])) 
[['Josh Winner', 15], ['Mary Goodsprings', 15], ['Bob Person', 10], ['Jimmy Dexter', 5]] 
0

由於Python的排序是guaranteed to be stable(也就是說當多個項目具有相同的鍵的順序被保留),您可以排序在多個運行列表中。最重要的標準最後。

import operator 

data = [['Bob Person', 10], ['Josh Winner', 15], ['Jimmy Dexter', 5], ['Mary Goodsprings', 15]] 
data.sort() 
data.sort(key=operator.itemgetter(1), reverse=True) 
相關問題