Python 使用自定义排序函数按键对字典列表进行排序
我有一个字典列表,希望在python中按键“id”排序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
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}]