如何根据另一个列表对一个元组列表进行排序

发布于 2021-01-29 17:16:24

有一个清单:

a = [("ax", 1), ("ec", 3), ("bk", 5)]

另一个清单:

b = ["ec", "ax", "bk"]

我想a根据以下内容进行排序b

sort_it(a, b)

a = [("ec", 3), ("ax", 1), ("bk", 5)]

这该怎么做?

关注者
0
被浏览
195
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    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]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看