我有一个字典列表如下:如何根据所需顺序给出一个id列表来排序Python字典列表?
users = [{'id':1, 'name': 'shreyans'}, {'id':2, 'name':'alex'}, {'id':3, 'name':'david'}]
,并与所需的顺序ID列表:
order = [3,1,2]
什么是由列表order
订购列表users
的最佳方式?
我有一个字典列表如下:如何根据所需顺序给出一个id列表来排序Python字典列表?
users = [{'id':1, 'name': 'shreyans'}, {'id':2, 'name':'alex'}, {'id':3, 'name':'david'}]
,并与所需的顺序ID列表:
order = [3,1,2]
什么是由列表order
订购列表users
的最佳方式?
使用排序与自定义键:
users.sort(key=lambda x: order.index(x['id']))
users = [{'id':1, 'name': 'shreyans'},
{'id':2, 'name':'alex'},
{'id':3, 'name':'david'}]
order = [3,1,2]
users.sort(key=lambda x: order.index(x['id']))
如果列表是非常大的:
userd = {d['id']:d for d in users}
sortedusers = [userd.get(o) for o in order]
这是O(2n)
。仅使用sort
的解决方案将是O(n^3.log(n))
(排序为nlogn
,查找列表中每个id的位置是O(n^2)
),这对于较大的列表来说明显更差。对于较小的列表(例如3个项目),不创建新数据结构的低开销将使其更快;相反,如果您继续按新的order
规范进行排序,那么制作新字典的开销会很快下降。