此查询与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]]
有关如何解决这个问题的任何建议吗?
答案 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]]