如何双向排序python列表,按降序排列数字,按字母顺序按升序排序?

时间:2014-09-04 02:59:19

标签: python sorting

我正在尝试对包含单词和数字的元组的列表进行排序。

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

我怎样才能对此进行排序(可能使用lambda)以便我得到

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

2 个答案:

答案 0 :(得分: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 :(得分: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)]