2011-06-16 79 views
18

我有一個元組列表在我的Blender Python代碼排序元組的Python

scores=[(1489,"Sean"), (2850,"Bob"), (276,"Crap Player"), (78495, "Great Player"), (8473, "Damian"), (4860, "Andy"), (0, "Stephen")] 

我想通過自己的分數進行排序它們通過使用此

sorted(scores, key=lambda score: score[0], reverse=True) 

,但是這是行不通的。我不知道爲什麼。有小費嗎?

我認爲也許更好的實施方案是創建一個新的Score類領域namescore

編輯:

謝謝你們爲快速回復

這是給我沒有與sorted方法的錯誤,但沒有排序。 我用sort()它工作。

我覺得python在Blender中可能有點奇怪嗎?

謝謝!

+3

你的代碼工作正常:http://codepad.org/6AT3rCw3 – 2011-06-16 12:58:40

+1

它以什麼方式不起作用? – NPE 2011-06-16 12:59:12

+1

您可能沒有將排序結果賦值給變量,但您需要的卻是排序 – 2013-04-11 10:27:17

回答

31

只要做到:

print sorted(scores, reverse=True) 
[(78495, 'Great Player'), (8473, 'Damian'), (4860, 'Andy'), (2850, 'Bob'), (1489, 'Sean'), (276, 'Crap Player'), (0, 'Stephen')] 

你可以使用scores.sort(reverse=True)如果你想在地方進行排序,並順便在通過第一項,第二項的情況下通過默認排序元組的列表的排序功能..

+5

這也會按照字母順序排列具有相同分數的玩家,這可能是可取的。 – 2011-06-16 13:03:41

+0

@RobertHensing有沒有辦法讓第二個鍵(即玩家的名字)被「排序」成*不*排序? Docs說''sorted'*有保證*是穩定的,所以當被比較的1ary鍵是相等的時候它應該保留原來的順序,但是它不會。 – ray 2017-09-01 00:34:58

+0

在這種情況下,你實際上必須明確地使用'key'函數。例如:'sorted(scores,reverse = True,key = lambda s:s [0])' – ray 2017-09-01 00:43:23

10

sorted()返回排序序列。如果您想對列表進行排序,請使用list.sort()

0
scores.sort(reverse=True) 
>>> print scores 
[(78495, 'Great Player'), (8473, 'Damian'), (4860, 'Andy'), (2850, 'Bob'), (1489, 'Sean'), (276, 'Crap Player'), (0, 'Stephen')]