Python 3.3.2 - 根据数字对名称列表进行排序

时间:2013-08-19 07:53:11

标签: python sorting python-3.x

我需要根据它们所加的数字对名单进行排序。我拥有的数据的一个例子是:

[['Bob Person', 10], ['Josh Winner', 15], ['Jimmy Dexter', 5], ['Mary Goodsprings', 15]]

正常排序会这样做:

[['Bob Person', 10], ['Jimmy Dexter', 5], ['Josh Winner', 15], ['Mary Goodsprings', 15]]

我想要进行的排序应该基于它们所加的最大数量。但是,如果数字相等,那么它应该使用名称。像这样:

[['Josh Winner', 15], ['Mary Goodsprings', 15], ['Bob Person', 10], ['Jimmy Dexter', 5]]

请注意Mary和Josh是如何并列的,但Josh仍然在前面因为J来到M之前。

除了我应该使用key的{​​{1}}函数之外,我几乎不知道如何做到这一点。

2 个答案:

答案 0 :(得分:6)

使用-item[1]按降序排序,数字为item[0]

>>> data = [['Bob Person', 10], ['Josh Winner', 15], ['Jimmy Dexter', 5], ['Mary Goodsprings', 15]]
>>> sorted(data, key=lambda item: (-item[1], item[0]))
[['Josh Winner', 15], ['Mary Goodsprings', 15], ['Bob Person', 10], ['Jimmy Dexter', 5]]

答案 1 :(得分:0)

由于Python排序为guaranteed to be stable(意味着当多个项具有相同的键时保留顺序),您可以在多次运行中对列表进行排序。最重要的标准是最后一个。

import operator

data = [['Bob Person', 10], ['Josh Winner', 15], ['Jimmy Dexter', 5], ['Mary Goodsprings', 15]]
data.sort()
data.sort(key=operator.itemgetter(1), reverse=True)