Имейте в виду, что решение Игнасио эквивалентно выполнению вложенных циклов for, которых вы хотели избежать.то есть это п ^ 2.Более эффективное решение заключается в следующем:
>>> filterdict = dict((k,i) for i,k in enumerate(filter))
>>> sorted(b, key=lambda x: filterdict[x['id']])
[{'id': 'a'}, {'id': 'c'}, {'id': 'e'}, {'id': 'b'}]
или:
>>> b.sort(key=lambda x: filterdict[x['id']])
>>> b
[{'id': 'a'}, {'id': 'c'}, {'id': 'e'}, {'id': 'b'}]
для сортировки на месте.
Редактировать: antonakos 'Решение является лучшим (2n), если ваши идентификаторы уникальны (что, вероятно, является безопасным предположением, но вы не указали, поэтому я не хотел предполагать).Вот несколько более короткий способ написания того, что он написал, на случай, если это поможет прояснить ситуацию:
>>> d = dict((i['id'], i) for i in b)
>>> [d[key] for key in filter]
[{'id': 'a'}, {'id': 'c'}, {'id': 'e'}, {'id': 'b'}]