按多列排序,每列的顺序不同

时间:2013-05-10 16:53:23

标签: python

要使用两列我对元组列表进行排序:

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

如何排序t_l [-1]按升序排序,这是默认值,但t_l [1]按降序排序?

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

有什么想法吗?

2 个答案:

答案 0 :(得分: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]))

答案 1 :(得分: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]]

你在找什么?