2015-12-09 73 views
0

我想排序列表的列表,即:如何通過使第一行與另一個列表匹配來對列表進行排序?

[['Y', 'K', 'E'], 
[3, 1, 2], 
[6, 4, 5]] 

該名單的第一行應與其他提供的列表(這個列表總是包含匹配字母的第一個列表的第一行):

['K', 'E', 'Y'] 

,使最終輸出爲:

[['K', 'E', 'Y'], 
    [1, 2, 3], 
    [4, 5, 6]] 
+2

你嘗試什麼嗎? –

+1

我很困惑。你想如何排序?基於第二行?基於第三行? – erip

+0

@erip他想按照提供的順序排序 –

回答

10

簡單的方法是用zip()移調它,它的排序與T的關鍵使用列表解析

>>> data = [['Y', 'K', 'E'], 
... [3, 1, 2], 
... [6, 4, 5]] 
>>> key = 'KEY' 
>>> sorted(zip(*data), key=lambda x: key.index(x[0])) 
[('K', 1, 4), ('E', 2, 5), ('Y', 3, 6)] 
>>> list(zip(*sorted(zip(*data), key=lambda x: key.index(x[0])))) 
[('K', 'E', 'Y'), (1, 2, 3), (4, 5, 6)] 
+0

luv這個伴侶,優雅的方式,感謝分享:) – Netwave

+0

好的解決方案。我打算做類似的事情。 +1 – erip

+0

我發現這不工作時,我用數據[1/2]列表中的字符,而不是整數,無論​​如何周圍呢? – hysteriaistic

3

一個非常簡單的方法:他第一個元素的鍵列表中的索引,然後轉回來

>>> L = [['Y', 'K', 'E'], [3, 1, 2], [6, 4, 5]] 
>>> indexes = [L[0].index(x) for x in "KEY"] 
>>> [[row[i] for i in indexes] for row in L] 
[['K', 'E', 'Y'], [1, 2, 3], [4, 5, 6]] 
+1

優雅的解決方案,+1 –

+0

快速,清晰。相當不錯。 – TigerhawkT3

相關問題