2014-09-04 258 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