我写了一个程序,必须对以下内容进行排序:
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])进行排序.这完全符合您的逻辑:
"因此,它意味着它不是按数字排序,但如果数字相同,则排序将按字母顺序排列."
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)