python中的排序函数

rat*_*kke 6 python sorting

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

unsorted_list=[['le', 5], ['aab', 4], ['aaa', 5]]
Run Code Online (Sandbox Code Playgroud)

至:

[['aaa', 5], ['le', 5], ['aab', 4]]
Run Code Online (Sandbox Code Playgroud)

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

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

不幸的是,它没有按字母顺序返回字符串.有什么建议怎么办?

eum*_*iro 10

既然x[1]是一个整数,你只需通过否定它就可以从最大值到最小值进行排序:

sorted(unsorted_list, key=lambda x: (-x[1], x[0]))
Run Code Online (Sandbox Code Playgroud)

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

"因此,它意味着它不是按数字排序,但如果数字相同,则排序将按字母顺序排列."

  • 这有效的原因是因为序列按字典顺序进行比较 (3认同)

NPE*_*NPE 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]]
Run Code Online (Sandbox Code Playgroud)