2013-01-12 98 views
3

這是很容易實現正則雙排序:雙排序與反向

pairs = [(1, 2), (2, 1), (1, 3), (2, 4), (3, 1)] 

sorted(pairs,key=lambda x: (x[0],x[1])) 
# out: [(1, 2), (1, 3), (2, 1), (2, 4), (3, 1)] 

我有興趣如何與以相反的順序爲第二個元素做到這一點。這可以通過首先對第一項進行分組,然後將排序的第二項添加到一起來實現。我已經使用itertools.groupbydefaultdict來實現這一點。儘管如此,它仍然比普通的雙重排序複雜得多,所以我想知道,是否有一個簡潔的方法可以用更簡潔的方式來完成。

double_sort(pairs) 
# out: [(1, 3), (1, 2), (2, 4), (2, 1), (3, 1)] 

PS!我知道如何做到這一點,numpy.argsort,主要是想看到一個標準的庫方法。

+1

你拉姆達什麼都不做。攜手'整理(雙)已經給出了和你第一次相同的結果。 –

回答

4

這將數字和類似的數據類型

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

這將爲所有可比類型只在Python 2 :(

sorted(pairs, lambda x, y: cmp(x[0], y[0]) or cmp(y[1], x[1])) 
+0

+1,在看到類似的東西之後,感覺非常愚蠢:) – root