Python中的Sorted函数

6

我写了一个程序,需要对以下内容进行排序:

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

to:

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

应该按照数字排序,如果数字相同,则按字母顺序排序。 我有以下代码:
def sortItem(lista):
    ''' func for sort by item'''
    return lista[1]
sorted(unsorted_list, key=sortItem, reverse=True)

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

3个回答

10

由于 x[1] 是一个整数,你可以通过将其取反来从大到小排序:

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

key 中创建的元组将按照第一个元素(-x[1]),然后按照第二个元素(x[0])排序。这恰好对应于您的逻辑:

"因此,这意味着它按数字排序,但如果数字相同,则按字母顺序排列。"


3
这种方法有效的原因是因为序列是按字典顺序进行比较的。 - mgilson

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]]

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接