2013-05-10 93 views
0

排序使用两列我做一个元组列表:排序按多个列,其中每个列是按照不同的顺序

t_l = sorted(t_l, key = lambda t_l: (t_l[-1], t_l[1])) 

我怎样才能排序使得T_L [-1]是按升序排列,这是默认值,但t_l [1]按降序排序?

使用reverse = True将按降序对两列进行排序。

任何想法?

+0

如果其中一列是数字,那么你可以使用'-t_l [1]'作为它的关键。 – zch 2013-05-10 16:56:49

+0

是否是任一列的数字? – 2013-05-10 16:58:36

+0

谢谢zch。这正是我所做的。 – PythonRunner 2013-05-10 17:04:52

回答

0

如果其中一列是数字,或者可以用数字表示,则可以反转其中一列的排序。然后您可以简单地使用否定数字列来反转该列的排序。

如果t_l[-1]列是数字,使用:

sorted(t_l, key=lambda i: (-i[-1], i[1])) 

(使用不同的名称为输入列表和lambda参数减少混乱)

如果列不是数值但另一种是,您仍然可以使用相同的技巧,但需要反转整个排序:

sorted(t_l, key=lambda i: (i[-1], -i[1]), reverse=True) 

单字符列可以制作通过使用ord()函数进行数值计算;使用ord()会导致同样的排序顺序,但因为它是数字,你现在可以扭转这种局面:

sorted(t_l, key=lambda i: (-ord(i[-1]), i[1])) 
+0

非常感谢您的详细回复。 – PythonRunner 2013-05-10 17:19:37

0

我尝试了上一个例子的简单的解决方案

t_l = [[3,4,5,6,2,4,6],[6,7,3,4,5]] 

t_l = [sorted(t_l[0], reverse = False),sorted(t_l[1], reverse = True)] 

>>> t_l 
[[2, 3, 4, 4, 5, 6, 6], [7, 6, 5, 4, 3]] 

是你在找什么?