Python 使用自定义排序函数按键对字典列表进行排序

Python 使用自定义排序函数按键对字典列表进行排序,python,list,sorting,dictionary,Python,List,Sorting,Dictionary,我有一个字典列表,希望在python中按键“id”排序 items = [{'id' : 883},{'id' : 547},{'id' : 898},{'id' : 30},{'id' : 883}] 我希望根据给定的排序顺序按特定顺序对其进行排序: [30, 883, 547, 898] 在python3中如何执行此操作?使用键参数和带有自定义排序顺序的列表 sort_order = [30, 883, 547, 898] items.sort(key=lambda d: sort_or

我有一个字典列表,希望在python中按键“id”排序

items = [{'id' : 883},{'id' : 547},{'id' : 898},{'id' : 30},{'id' : 883}]
我希望根据给定的排序顺序按特定顺序对其进行排序:

[30, 883, 547, 898]

在python3中如何执行此操作?

使用
参数和带有自定义排序顺序的列表

sort_order = [30, 883, 547, 898]
items.sort(key=lambda d: sort_order.index(d['id']))
使用@Sphinx的建议,您可以提前为列表编制索引,以获得一些额外的速度提升
O(1)
,而不是
O(n)


您可以尝试在一行中不使用循环,如下所示:

items = [{'id' : 883},{'id' : 547},{'id' : 898},{'id' : 30},{'id' : 883}]

sorting_order=[30, 883, 547, 898]

print(sorted(items,key=lambda x:sorting_order.index(x['id'])))
输出:

[{'id': 30}, {'id': 883}, {'id': 883}, {'id': 547}, {'id': 898}]

本例中的排序逻辑是什么?什么逻辑可能产生这种排序?(
30883547898
)正如@janos所指出的,没有一个答案试图回答这个问题,因为它们忽略了你奇怪且无法解释的期望顺序。编辑:Brendan's尊重您要求的订单。显然,这是一个成功的例子。(开玩笑,我想)哈,这就是他想要的?不错的python fu,+1使用
sort\u order={}
而不是
sort\u order=[]
会更好吗<代码>排序顺序。索引(id)应该比dict[id]慢。我不太喜欢使用
索引
,因为它的
O(n)
aspect@Sphinx:用集合替换列表会破坏项目的初始排序顺序,因此算法失败<代码>观察print([30883547898])和
print({30883547898})之间的区别
@Sphinx好主意
[{'id': 30}, {'id': 883}, {'id': 883}, {'id': 547}, {'id': 898}]