2013-04-08 1 views
7

に別のに合わせて、1つのリストを並べ替え:は、私はこれらのリストがあるとのpython

ids = [4, 3, 7, 8] 
objects = [ 
      {"id": 7, "text": "are"}, 
      {"id": 3, "text": "how"}, 
      {"id": 8, "text": "you"}, 
      {"id": 4, "text": "hello"} 
      ] 

どのように私はobjectsを並べ替えることができますので、そのIDの順序はidsと一致しますか?私。この結果を得るために:

objects = [ 
      {"id": 4, "text": "hello"}, 
      {"id": 3, "text": "how"}, 
      {"id": 7, "text": "are"}, 
      {"id": 8, "text": "you"} 
      ] 

答えて

8
object_map = {o['id']: o for o in objects} 
objects = [object_map[id] for id in ids] 
+0

を私はあなたが何度も何度もそれをやっていないのdict-COMPを考慮思います。 – mgilson

1
In [25]: idmap = dict((id,pos) for pos,id in enumerate(ids)) 

In [26]: sorted(objects, key=lambda x:idmap[x['id']]) 
Out[26]: 
[{'id': 4, 'text': 'hello'}, 
{'id': 3, 'text': 'how'}, 
{'id': 7, 'text': 'are'}, 
{'id': 8, 'text': 'you'}] 
+0

私はテキストエディタで持っていたものを奇妙にほとんどcharに変換しています; –

+0

@JonClements:このサイトでは時間がかかりすぎています;) – NPE

0
>>> ids = [4,3,7,8] 
>>> id_orders = {} 
>>> for i,id in enumerate(ids): 
...  id_orders[id] = i 
... 
>>> id_orders 
{8: 3, 3: 1, 4: 0, 7: 2} 
>>> 
>>> sorted(objs, key=lambda x: id_orders[x['id']]) 
+0

これはNPEの回答と大きく違っていません... –

関連する問題