Python3.3.2基于编号对名称列表进行排序

2024-06-16 11:07:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要根据名字的编号对名单进行排序。我有一个数据的例子是:

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

普通的分类可以做到:

^{pr2}$

我要做的事情应该是基于他们的最大数量。但是,如果数字相等,那就应该用名字。像这样:

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

注意玛丽和乔希都是平手,但乔希仍然在前面,因为J在M前面

除了我应该使用sort()key函数之外,我几乎不知道该怎么做。在


Tags: 数据排序分类名字编号例子personbob
2条回答

使用-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]]

由于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)

相关问题 更多 >