如何在给定具有所需顺序的ID列表的情况下对python的字典列表进行排序?

时间:2013-07-18 22:06:06

标签: python sorting

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

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

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

order = [3,1,2]

通过列表users订购列表order的最佳方法是什么?

3 个答案:

答案 0 :(得分: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']))

答案 1 :(得分: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规范进行排序,制作新词典的开销将很快摊销。

答案 2 :(得分:2)

使用自定义键排序:

users.sort(key=lambda x: order.index(x['id']))