use*_*936 2 python sorting dictionary list
我有一个字典列表,我希望通过键'id'在python中排序.
items = [{'id' : 883},{'id' : 547},{'id' : 898},{'id' : 30},{'id' : 883}]
Run Code Online (Sandbox Code Playgroud)
我希望根据给定的排序顺序按特定顺序对它们进行排序:
[30, 883, 547, 898]
Run Code Online (Sandbox Code Playgroud)
我将如何在python3中执行此操作?
使用key参数和带有自定义排序顺序的列表.
sort_order = [30, 883, 547, 898]
items.sort(key=lambda d: sort_order.index(d['id']))
Run Code Online (Sandbox Code Playgroud)
使用@Sphinx的建议,您可以事先索引列表,以获得一些额外的速度提升,O(1)而不是O(n)
sort_order_index = {val: i for i, val in enumerate(sort_order)}
items.sort(key=lambda d: sort_order_index.get(d['id'], 0))
Run Code Online (Sandbox Code Playgroud)