使用自定义排序功能按键对字典列表进行排序

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中执行此操作?

Bre*_*bel 8

使用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)

  • 使用`sort_order = {}`而不是`sort_order = []`会更好吗?`sort_order.index(id)`应该比dict [id]慢 (2认同)
  • @Sphinx:用集合替换列表会破坏sort_order中项目的初始顺序,因此算法失败.`注意`print([30,883,547,898])`和`print({30,883,547,898})之间的区别 (2认同)