我正在尝试使用以下代码对列表数组进行排序:
from operator import itemgetter
data=[['Japan',0],['Japan',36],['Japan',21],['Germany',7]]
for line in data: print(line)
print('---')
sort1=sorted(data,key=itemgetter(0))
for line in sort1: print(line)
print('---')
sort1=sorted(sort1,key=itemgetter(1))
for line in sort1: print(line)
在 Python 3.9.5 中,我发现它没有按我的预期工作:
['Japan', 0]
['Japan', 36]
['Japan', 21]
['Germany', 7]
---
['Germany', 7]
['Japan', 0]
['Japan', 36]
['Japan', 21]
---
['Japan', 0]
['Germany', 7]
['Japan', 21]
['Japan', 36]
对排序的第一次调用确实首先移动了“德国”,而没有触及其余部分; 但第二个,我希望通过离开“德国”来重新排列“日本”线路 最上面,没有:它重新排序了所有内容,而不是在第二个字段上。
我已经在互联网上阅读文献和答案几个小时了, 发现了很多关于如何做到这一点的教程,例如这里的第 29 点:按两个字段对 Python 列表进行排序,看起来我正在做完全相同的事情。但显然不是。
当您使用
sort()
或 sorted()
时,它会根据您提供的键对列表进行排序,并且会按照最初的顺序保持联系。因此,如果您想根据多个参数进行排序,请按 last 决胜局 first 进行排序。
['Japan', 0]
['Japan', 36]
['Japan', 21]
['Germany', 7]
---First sorting by the number (lower priority):
['Japan', 0]
['Germany', 7]
['Japan', 21]
['Japan', 36]
---Then sorting by the country (ties keep their order):
['Germany', 7]
['Japan', 0]
['Japan', 21]
['Japan', 36]