基于外部列表中的值对列表进行排序(Python)

R.B*_*ahl 3 python sorting list

此查询与之前的排序有些相关

在哪里,需要对以下列表进行排序,

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 = [2, 0, 1]`
Run Code Online (Sandbox Code Playgroud)

排序应该产生

[[2, .49, 2], [6, .98, 2] [1, .45, 0], [3, .98, 0], [4, .82, 1], [5, .77, 1]]
Run Code Online (Sandbox Code Playgroud)

最后,按降序排列基于中间元素的子列表应该产生:

[ [6, .98, 2],[2, .49, 2],   [3, .98, 0], [1, .45, 0], [4, .82, 1], [5, .77, 1]]
Run Code Online (Sandbox Code Playgroud)

关于如何解决这个问题的任何建议?

phi*_*hag 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]]
Run Code Online (Sandbox Code Playgroud)