python按不同标准排序元组

时间:2016-08-23 06:08:41

标签: python list sorting tuples

我有一个列表a = [(1,'a'), (1,'b'), (2,'c')],我希望获得此列表:[(2,'c'), (1,'a'), (1,'b')]

如果我这样做:

sorted(a, reverse=True)

我只能得到:

[(2,'c'), (1,'b'), (1,'a')]

如何获得我想要的清单?

3 个答案:

答案 0 :(得分:1)

如果要保留原始列表中的排序顺序,但只按第一个元素排序,则可以

>>> from operator import itemgetter
>>> a = [(1,'a'), (1, 'x'), (1,'b'), (2,'c')]
>>> sorted(a, key=itemgetter(0), reverse=True)
[(2, 'c'), (1, 'a'), (1, 'x'), (1, 'b')]

在Python中,sortsorted函数使用TimSort算法,这是一种稳定的排序。稳定意味着对于那些相互比较相等的元素保留原始的相对排序。

如果你想同时按多个标准排序,你可以在整数的情况下使用一个函数作为键,返回相反数量的反转,但一般情况下您可以通过按相反的顺序排序几次来完成此操作:

>>> b = sorted(a, key=itemgetter(1))        # sort by second element, ascending
>>> b.sort(key=itemgetter(0), reverse=True) # sort by first element, descending
>>> b
[(2, 'c'), (1, 'a'), (1, 'b'), (1, 'x')]

答案 1 :(得分:1)

您可以使用<script> $(document).ready(function () { var dateval = $('#<%= txtdate.ClientID %>').val(); if (dateval != '') { var options = { selectedDate: dateval, size: 'medium', width: 960 } } else { var options = { size: 'medium', width: 960 } } $('#paginator').datepaginator(options); $('#paginator').on('selectedDateChanged', function (event, date) { $('#<%= txtdate.ClientID %>').val(date.substring(4, 12)); }); }); </script> 函数lambda来实现此目的:

sorted

这将按索引0处的值的降序对列表进行排序,然后按索引1处的值的升序排序

答案 2 :(得分:0)

试试这个,

from operator import itemgetter
sorted(a, key=itemgetter(0),reverse=True)

<强>结果

[(2, 'c'), (1, 'a'), (1, 'b')]