簡體   English   中英

如何在給定具有所需順序的ID列表的情況下對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個項目),不創建新數據結構的低開銷將使其更快; 相反,如果orderorder規范進行排序,制作新詞典的開銷將很快攤銷。

使用自定義鍵排序:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM