如果给定一个具有所需顺序的id列表,如何对python词典列表进行排序?

2024-04-25 23:48:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的词典列表:

users = [{'id':1, 'name': 'shreyans'}, {'id':2, 'name':'alex'}, {'id':3, 'name':'david'}]

以及具有所需顺序的ID列表:

order = [3,1,2]

按列表order排列列表users的最佳方式是什么?你知道吗


Tags: nameid列表顺序方式orderusers词典
3条回答
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的开销将很快摊销。你知道吗

相关问题 更多 >

    热门问题