2015-12-09 35 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

相关问题