0

我需要根据它们所连接的数字对名称列表进行排序。我拥有的数据示例是:

[['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使用sort().

4

2 回答 2

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]]
于 2013-08-19T07:54:54.627 回答
0

由于 Python 排序保证是稳定的(意味着当多个项目具有相同的键时会保留顺序),因此您可以在多次运行中对列表进行排序。最重要的标准排在最后。

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)
于 2013-08-19T08:16:27.377 回答