如何双向排序python列表,按降序排列数字,按升序排列字母排序?
问题描述:
我想排序一个列表,它有一个单词和一个数字组成的元组。如何双向排序python列表,按降序排列数字,按升序排列字母排序?
my_list = [('hello',25), ('hell',4), ('bell',4)]
我该如何解决这(使用lambda可能),这样我得到
[('hello',25), ('bell',4), ('hell',4)]
答
最简单的方法就是利用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指南中推荐的技术。
答
您可以将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
你能解释一下你面临的问题吗? – Nilesh 2014-09-04 03:07:00