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))は (sort is nlogn、list 内のすべての id の位置を見つける is 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 に答える