Sort one list to match another in python

Suppose I have these lists:

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

How can I sort objects so that the order of their ids matches ids ? That is, to get this result:

 objects = [ {"id": 4, "text": "hello"}, {"id": 3, "text": "how"}, {"id": 7, "text": "are"}, {"id": 8, "text": "you"} ] 
+7
source share
3 answers
 object_map = {o['id']: o for o in objects} objects = [object_map[id] for id in ids] 
+8
source
 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'}] 
+1
source
 >>> 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
source

All Articles