如何根据另一个列表对一个元组列表进行排序
有一个清单:
a = [("ax", 1), ("ec", 3), ("bk", 5)]
另一个清单:
b = ["ec", "ax", "bk"]
我想a
根据以下内容进行排序b
:
sort_it(a, b)
a = [("ec", 3), ("ax", 1), ("bk", 5)]
这该怎么做?
-
a.sort(key=lambda x: b.index(x[0]))
这
a
使用b
每个元组的第一个元素的index ina
作为对其进行排序的值就地进行排序。另一种可能更简洁的书写方式是:
a.sort(key=lambda (x,y): b.index(x))
如果您有大量项目,则做一些不同的事情可能会更有效率,因为
.index()
在长列表上可能是一项昂贵的操作,并且由于您已经知道顺序,因此实际上不需要进行完全排序:mapping = dict(a) a[:] = [(x,mapping[x]) for x in b]
请注意,这仅适用于2元组的列表。如果您希望它适用于任意长度的元组,则需要对其进行一些修改:
mapping = dict((x[0], x[1:]) for x in a) a[:] = [(x,) + mapping[x] for x in b]