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

时间:2012-06-27 08:31:23

标签: python list sorting

此查询与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

'1'

排序应该产生

`List_1 = [2, 0, 1]`

最后,根据中间元素按降序对子列表进行排序应该产生:

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

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

1 个答案:

答案 0 :(得分: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]]