[英]Sort a sorted nested list by another index
如何按另一个索引对已经排序的列表进行排序?
示例:我有一个按索引 1 排序的列表。
[["DOG", 5], ["DAM",5], ["DAN", 5], ["BAT", 4], ["CAT", 3], ["MAN", 2]]
我想要以下 output:
[["DAM", 5], ["DAN",5], ["DOG", 5], ["BAT", 4], ["CAT", 3], ["MAN", 2]]
该列表已按索引 1 排序。如果索引 1 在列表中多次出现,我应该如何对索引 0 进行排序,以便整个嵌套列表保持索引 0 的顺序?
您可以构造自定义键 function 返回 2 项元组(第一个第二个元素(负数)然后是第一个元素):
lst = [["DOG", 5], ["DAM", 5], ["DAN", 5], ["BAT", 4], ["CAT", 3], ["MAN", 2]]
print(sorted(lst, key=lambda k: (-k[1], k[0])))
印刷:
[["DAM", 5], ["DAN", 5], ["DOG", 5], ["BAT", 4], ["CAT", 3], ["MAN", 2]]
由于列表已排序一次,您可以使用itertools.groupby
:
>>> from itertools import groupby, chain
>>> from operator import itemgetter
>>> list(chain.from_iterable(sorted(group) for _, group in groupby(lst, key=itemgetter(1))))
[['DAM', 5], ['DAN', 5], ['DOG', 5], ['BAT', 4], ['CAT', 3], ['MAN', 2]]
我不确定你的意思。 但是,您始终可以根据键对列表进行排序。
l = ['ali', 'mohamed', 'ahmed']
l.sort(key = lambda char: char[2]) # this will sort the list based on the
#charachter at index 2
output: ['mohamed', 'ali', 'ahmed']
您还可以按降序或升序对列表进行排序。
l.sort(key = lambda char: char[2], reverse = True)
output: ['ahmed', 'ali', 'mohamed']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.