2013-07-18 39 views

回答

2

使用排序与自定义键:

users.sort(key=lambda x: order.index(x['id'])) 
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'])) 
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规范进行排序,那么制作新字典的开销会很快下降。

相关问题