2013-02-08 33 views
2
>>> from operator import itemgetter 
>>> ul = [(10,2),(9,4),(10,3),(10,4),(9,1),(9,3)] 
>>> ol = sorted(ul, key=itemgetter(0,1), reverse=True) 
>>> ol 
[(10, 4), (10, 3), (10, 2), (9, 4), (9, 3), (9, 1)] 

我想要的是在第二个键上排序reverse = False。换句话说,我想要的结果是:Python:使用两个不同方向排序的键排序列表

[(10, 2), (10, 3), (10, 4), (9, 1), (9, 3), (9, 4)] 

我该怎么做?

回答

5

对数字进行排序,你可以使用一个负排序关键字:

sorted(ul, key=lambda x: (-x[0], x[1])) 

或者,如果你有非数字数据,你可以做两遍排序(通过最显著关键第一分选) :

ol = sorted(ul, key=lambda x: x[1]) 
ol = sorted(ol, key=lambda x: x[0], reverse=True) 
+1

我打算建议两种排序...作为一个'list.sort'方法是一个稳定的排序 - 这很好地工作 – 2013-02-08 22:06:03