根据外部列表中的值对列表进行排序(Python)

3
这个查询与此前有关Python排序的查询有点相关,链接如下:sorting。需要对以下列表进行排序: data = [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1], [5, .77, 1], [6, .98, 2] ] 首先按照内部列表的最后一个元素的值进行排序,如下所示: [[1, .45, 0], [3, .98, 0],[4, .82, 1], [5, .77, 1], [2, .49, 2], [6, .98, 2]] 然后在子列表内部进行排序,即首先使用中间成员作为键对具有最后一个成员为“0”的列表进行排序,按降序排列,然后对具有最后一个成员为“1”的子列表进行排序,以此类推。
现在,我想根据外部列表中这些元素的顺序进行排序。也就是说,如果外部列表为List_1,则需要按照List_1中元素的顺序对data进行排序。
`List_1 = [2, 0, 1]`

排序应该产生

[[2, .49, 2], [6, .98, 2] [1, .45, 0], [3, .98, 0], [4, .82, 1], [5, .77, 1]]

最后,根据中间元素进行降序排序的子列表应该是这样的:
[ [6, .98, 2],[2, .49, 2],   [3, .98, 0], [1, .45, 0], [4, .82, 1], [5, .77, 1]]

有关如何处理这个问题,您有什么建议吗?
1个回答

5

在键中使用list.index

>>> data = [[1, .45, 0], [2, .49, 2], [3, .98, 0], [4, .82, 1],
            [5, .77, 1], [6, .98, 2]]
>>> List_1 = [2, 0, 1]
>>> sorted(data, key=lambda e: (List_1.index(e[2]), -e[1]))
[[6, 0.98, 2], [2, 0.49, 2], [3, 0.98, 0], [1, 0.45, 0],
 [4, 0.82, 1], [5, 0.77, 1]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接