我写了一个程序,必须对以下内容进行排序:
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)
不幸的是,它不会按字母顺序返回字符串。 有什么建议怎么办?
答案 0 :(得分:10)
由于x[1]
是一个整数,你可以通过否定它从最大值到最小值进行排序:
sorted(unsorted_list, key=lambda x: (-x[1], x[0]))
key
中创建的元组将根据第一个元素(-x[1]
)进行排序,然后按第二个元素(x[0]
)进行排序。这完全符合您的逻辑:
“因此,它意味着比按数字排序,但如果数字相同,则排序将按字母顺序排列。”
答案 1 :(得分: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]]
答案 2 :(得分: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)