2024-04-25 23:48:33 发布
网友
我有一个这样的词典列表:
users = [{'id':1, 'name': 'shreyans'}, {'id':2, 'name':'alex'}, {'id':3, 'name':'david'}]
以及具有所需顺序的ID列表:
order = [3,1,2]
按列表order排列列表users的最佳方式是什么?你知道吗
order
users
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']))
对自定义键使用排序:
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的开销将很快摊销。你知道吗
O(2n)
sort
O(n^3.log(n))
nlogn
O(n^2)
对自定义键使用排序:
如果名单真的很大:
这是
O(2n)
。只使用sort
的解决方案将是O(n^3.log(n))
(排序是nlogn
,查找列表中每个id的位置是O(n^2)
),这对于较大的列表来说显然更糟。对于较小的列表(例如3个条目),不创建新数据结构的低开销将使其更快;相反,如果您继续按新的order
规范排序,则生成新dict的开销将很快摊销。你知道吗相关问题 更多 >
编程相关推荐