python中的排序函数

时间:2013-01-08 15:55:16

标签: python sorting

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

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)

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

3 个答案:

答案 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)