fxy*_*fxy 11 python sorting list
说,我有一个清单A = [[3,5],[1,3],[6,1]].
我说还有另一份清单 B = [6,1,3]
我想对列表A进行排序,以便A变为[[6,1],[1,3],[3,5]],适合给定的BIe,每个A子列表的第一个成员应该根据B进行排序.
Pau*_*ney 15
派生一个dict,将B中的数字映射到它们的索引,并在排序键函数中使用它.这样,您可以保持按键功能的恒定时间.
>>> A = [[3,5],[1,3],[6,1]]
>>> B = [6,1,3]
>>> srt = {b: i for i, b in enumerate(B)}
>>> sorted(A, key=lambda x: srt[x[0]])
[[6, 1], [1, 3], [3, 5]]
Run Code Online (Sandbox Code Playgroud)
这段代码肯定有一些注意事项.如果重复一个数字,B您将获得排序中使用的最后一个条目的索引.
此外,如果A中的条目与B中不匹配,则表示您有KeyError.你可以通过使用dict.get一些默认值来缓解这种情况,但是如果您的输入数据一开始就搞砸了,那么错误是一件好事.
您可以查找每个[0]元素A使用位于.index中B
>>> sorted(A, key = lambda i: B.index(i[0]))
[[6, 1], [1, 3], [3, 5]]
Run Code Online (Sandbox Code Playgroud)
或就地排序
>>> A.sort(key = lambda i: B.index(i[0]))
>>> A
[[6, 1], [1, 3], [3, 5]]
Run Code Online (Sandbox Code Playgroud)