4

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

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

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

order = [3,1,2]

users按列表排序列表的最佳方法是order什么?

4

3 回答 3

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']))
于 2013-07-18T22:12:52.680 回答
3

如果列表真的很大:

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 的开销将很快摊销。

于 2013-07-18T22:22:21.077 回答
2

使用带有自定义键的排序:

users.sort(key=lambda x: order.index(x['id']))
于 2013-07-18T22:13:40.703 回答