2015-02-11 36 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')]