[英]How do I sort a list of dictionaries by last name of the dictionary in Python?
[英]how do I sort a python list of dictionaries given a list of ids with the desired order?
我有一个这样的词典列表:
users = [{'id':1, 'name': 'shreyans'}, {'id':2, 'name':'alex'}, {'id':3, 'name':'david'}]
以及具有所需顺序的ID列表:
order = [3,1,2]
按列表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']))
如果列表真的很大:
userd = {d['id']:d for d in users}
sortedusers = [userd.get(o) for o in order]
这是O(2n)
。 仅使用sort
的解决方案将是O(n^3.log(n))
(sort是nlogn
,查找列表中每个id的位置是O(n^2)
),这对于较大的列表显然更糟。 对于较小的列表(例如3个项目),不创建新数据结构的低开销将使其更快; 相反,如果order
新order
规范进行排序,制作新词典的开销将很快摊销。
使用自定义键排序:
users.sort(key=lambda x: order.index(x['id']))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.