2015-02-11 72 views
0

我有一個二維表 -排序2D列出重點

[('John', 7), ('Max', 10), ('Sarah', 10), ('Tara', 7)] 

,我想通過降數(最高的優先),然後名稱(按字母順序)進行排序。

我已經使用這個代碼 -

highestscore = sorted(highestscore, key = lambda x: (x[1],x[0]), reverse=True) 

,但我得到的結果

[('Sarah', 10), ('Max', 10), ('Tara', 7), ('John', 7)] 

任何想法?

+1

不可逆的名單?我的意思是輸出對我來說是正確的,Sarah的得分最高,Max和Tara和John的得分最高。 – 2015-02-11 12:25:39

+0

而不是將'sorted()'的結果重新分配給同一個變量,您可以在適當的位置排序:'highestscore.sort(key = lambda x:(-x [1],x [0]))'' – mhawke 2015-02-11 12:35:08

回答

3

您需要混合降序(分數)和升序(名稱)。你可能只是使用 - 的x[1]代替reverse=True

highestscore = sorted(highestscore, key = 
    lambda x: (int(-x[1]), x[0].lower())) 

我還添加了lower(),使字母順序不區分大小寫。結果是[('Max', 10), ('Sarah', 10), ('John', 7), ('Tara', 7)]

0

您排序是沒事...你需要一個改變你的元素之後地圖。

highestscore = sorted(highestscore, key = lambda x: (x[1],x[0]), reverse=True) 

scores = [ (x[ 1 ], x[ 0 ]) for x in highestscore ] 

其結果將是

[(10, 'Max'), (10, 'Sarah'), (7, 'John'), (7, 'Tara')]