我有一个这样的字典列表:
users = [{'id':1, 'name': 'shreyans'}, {'id':2, 'name':'alex'}, {'id':3, 'name':'david'}]
以及具有所需顺序的 id 列表:
order = [3,1,2]
users
按列表排序列表的最佳方法是order
什么?
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
规范进行排序,则制作新 dict 的开销将很快摊销。
使用带有自定义键的排序:
users.sort(key=lambda x: order.index(x['id']))