Python,按另一个列表排序列表

时间:2014-04-14 19:52:25

标签: python python-2.7

我有一个列表a

a = ['c','d','b','a','e']

和列表b

b = ['a001','b002','c003','d004','e005']

我怎样才能获得我的列表c,如下所示:

c = ['c003','d004','b002','a001','e005']

基本上按照b中定义的顺序使用每个元素的一部分对a进行排序。

非常感谢。

3 个答案:

答案 0 :(得分:4)

您可以使用key的{​​{1}}命名参数

来执行此操作
sorted()

答案 1 :(得分:3)

您可以尝试将lambda函数传递给key内置函数的sorted()参数:

a = ['c', 'd', 'B', 'a', 'e']
b = ['a001', 'B002', 'c003', 'd004', 'e005']
c = sorted(b, key = lambda x: a.index(x[0])) # ['c003', 'd004', 'b002', 'a001', 'e005']

答案 2 :(得分:2)

如果您有一个非常大的列表,使用.index的解决方案将不会非常有效,因为第一个列表对于第二个列表中的每个条目都是index。这将花费O(n ^ 2)时间。

相反,您可以构建排序映射:

order = {v:i for i,v in enumerate(a)}
c = sorted(b, key=lambda x: order[x[0]])