2013-05-10 77 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]] 

是你在找什麼?