繁体   English   中英

按另一个索引对已排序的嵌套列表进行排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM