3

这个查询与前面关于排序的查询有点相关

其中,需要对以下列表进行排序,

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]`

排序应该产生

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

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

4

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]]
于 2012-06-27T08:37:58.673 回答