我需要根据它们所加的数字对名单进行排序。我拥有的数据的一个例子是:
[['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}}函数之外,我几乎不知道如何做到这一点。
答案 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)