2011-06-16 64 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')]