6

我编写了一个程序,它必须对以下内容进行排序:

unsorted_list=[['le', 5], ['aab', 4], ['aaa', 5]]

到:

[['aaa', 5], ['le', 5], ['aab', 4]]

它应该按数字排序。如果数字相同,则应按字母顺序排序。我有以下代码:

def sortItem(lista):
    ''' func for sort by item'''
    return lista[1]
sorted(unsorted_list, key=sortItem, reverse=True)

不幸的是,它不返回按字母顺序排列的字符串。有什么建议怎么做吗?

4

3 回答 3

10

因为x[1]是一个整数,你可以简单地通过否定它来从最大值到最小值排序:

sorted(unsorted_list, key=lambda x: (-x[1], x[0]))

创建的元组key将根据第一个元素(-x[1])排序,然后是第二个元素(x[0])。这完全符合您的逻辑:

“所以,这意味着它是按数字排序的,但如果数字相同,则排序将按字母顺序排列。”

于 2013-01-08T15:56:49.580 回答
6
In [2]: l = [['le', 5], ['aab', 4], ['aaa', 5]]

In [3]: sorted(l, key=lambda (x,y):(-y,x))
Out[3]: [['aaa', 5], ['le', 5], ['aab', 4]]
于 2013-01-08T15:56:56.787 回答
0

如果有人不熟悉 lambda 函数,这里是如何通过从头开始定义自己的函数来分解它 -

unsorted_list=[['le', 5], ['aab', 4], ['aaa', 5]]
def num_and_alpha(tuple):
    return (-tuple[1], tuple[0])

print sorted(unsorted_list, key=num_and_alpha)
于 2019-05-11T09:01:15.957 回答