有一个 list :
a = [("ax", 1), ("ec", 3), ("bk", 5)]
另一个列表:
b = ["ec", "ax", "bk"]
我要按照b
对a
进行排序:
sort_it(a, b)
a = [("ec", 3), ("ax", 1), ("bk", 5)]
如何做到这一点?
最佳答案
a.sort(key=lambda x: b.index(x[0]))
这使用 a
中每个元组的第一个元素的 b
中的索引作为它排序的值对 a
进行就地排序开。
另一种可能更简洁的书写方式是:
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]
关于python - 如何根据另一个列表对元组列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12814667/