4

重複の可能性:
リストのリストを、指定された並べ替えられていない順序の3番目のリストで並べ替える

a = [{'id':1}, {'id':2}, {'id':3}]
b = [2,1,3]

プロパティを介してaをbでdict並べ替えるのに適した方法は何でしょうか。listid

結果は次のようになります

[{'id':2}, {'id':1}, {'id':3}]
4

3 に答える 3

7

bのすべてのidsが入力されていることを保証できる限り、ブードゥー教は必要ありませんa

In [1]: a = [{'id':1}, {'id':2}, {'id':3}]

In [2]: b = [2,1,3]

In [3]: a.sort(key=lambda v : b.index(v['id']))

In [4]: a
Out[4]: [{'id': 2}, {'id': 1}, {'id': 3}]

(最近はこれに代わる方法があるとよく言われlambdaますが、これは私が知っている最も明確な方法です)

編集:これは、リンクされた質問のこの回答 とほぼ同じであることに注意してください。

于 2012-05-09T17:57:37.150 に答える
3
dictFromList = dict(zip((x['id'] for x in a), a))
sortedList = [dictFromList[i] for i in b] 
于 2012-05-09T17:45:53.340 に答える
1

Python 2.7:

def sort_dict_by_list(a, b):        
    sortkeys = { v: k for (k, v) in enumerate(b) }
    return list(sorted(a, key=lambda x: sortkeys[x['id']]))

a = [{ 'id': 1, 'name': 'foo' }, { 'id': 2, 'name': 'bar' }, { 'id': 3, 'name': 'baz' }]
b = [2,1,3]
print sort_dict_by_list(a, b)

プリント:

[{'id': 2, 'name': 'bar'}, {'id': 1, 'name': 'foo'}, {'id': 3, 'name': 'baz'}]
于 2012-05-09T17:59:52.390 に答える