2014-09-04 328 views

回答

2

最簡單的方法就是利用sort stability做那種在兩個通道:

>>> lot = [('hello', 25), ('hell', 4), ('bell', 4)] 
>>> lot.sort(key=lambda r: r[0]) 
>>> lot.sort(key=lambda r: r[1], reverse=True) 
>>> lot 
[('hello', 25), ('bell', 4), ('hell', 4)] 

您也可以使用sorted()

>>> lot = [('hello', 25), ('hell', 4), ('bell', 4)] 
>>> sorted(sorted(lot, key=lambda r: r[0]), key=lambda r: r[1], reverse=True) 
[('hello', 25), ('bell', 4), ('hell', 4)] 

這是在Python的Sorting Howto指南中推薦的技術。

1

您可以將key參數內的變換轉換爲sorted以實現所需的排序。

x = [('hello',25),('hell',4),('bell',4)] 

sorted(x, key = lambda tup: (-tup[1], tup[0])) 
Out[15]: [('hello', 25), ('bell', 4), ('hell', 4)] 
+1

儘管在這種情況下可行,但它不是一種適用於其他情況的通用解決方案。 (例如,您不能使用降序排列字符串的技術;它只適用於數字)。 – 2014-09-04 03:19:20