按照给定的自定义顺序对列表进行排序

4

我有一个元组列表

x = [('U', 3), ('R', 3)]

我希望按照每个元组的第一个元素('U'或'R')的自定义顺序对列表进行排序。

顺序应为:

order = ["R", "D", "L", "U"]

因此,我示例的输出将是:

x = [('R', 3), ('U', 3)]

如何在最短时间内完成这件事?谢谢。
2个回答

11
sorted(x, key=lambda x: order.index(x[0]))

index()会返回一个适当的可比较键(元组的第一个元素)


3
请注意,如果该值不在列表中,将会引发异常。 - Mr. E

4

如果输入很大,值得预先计算字典以便快速查找元素位置:

order_map = {}
for pos, item in enumerate(order):
    order_map[item] = pos

sorted(x, key=lambda x: order_map[x[0]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接