排序列表返回原始序列

时间:2018-11-12 01:20:25

标签: python python-3.x list sorting

我正在尝试根据第二个列表的顺序对列表进行排序。我的方法目前如下:

DEPARTMENT  SECTION     SUBSECTION
----------  ---------   -----------
A           A1          A101
                        A102
            A2          A201
                        A202
B           B1          B101
                        B102
            B2          B201
                        B202

它没有将letters = ["m", "h", "a"] order = ["h", "a", "m"] sorted(letters, key=lambda letters: order.index(letters[0])) print(letters) 排序为与letters(第二个列表)相同,而是使order保持不变。任何帮助将不胜感激,谢谢!

3 个答案:

答案 0 :(得分:3)

要按order的索引正确排序,您需要执行以下操作:

sorted(letters, key=lambda letters: order.index(letters))

在这种情况下,也可以使用letters[0],因为字符串只有长度1,但是在您可以自行调用letters时不需要。

但是,由于调用index() O(N),因此更好的方法是将索引存储在经过验证的字典映射中:

sort_map = {e: i for i, e in enumerate(order)}
sorted(letters, key=lambda x: sort_map[x])

确保订单查询为 O(1)

答案 1 :(得分:2)

除了@RoadRunner的答案外,不需要手动调用索引,也不需要缓慢的lambda,而是自动执行!!

也是这样:

sorted(letters, key=order.index)

要添加到@Shayn的答案中,请执行以下操作:

letters.sort(key=order.index)

答案 2 :(得分:0)

letters = ["m", "h", "a"]
order = ["h", "a", "m"]
letters = [x for x in order if x in letters]
print(letters)