2012-06-27 115 views
3

此查詢有點與此相關的較早者sorting排序的外部列表基於值的列表(Python)的

地方,它需要進行排序下面的列表,

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

任何如何解決這個問題的建議?

回答

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]] 
+0

謝謝!這完美的作品! –

相關問題