Not a generalized solution:
lst = [{'id':'1','name':'alfa'},{'id':'2','name':'bravo'},{'id':'3','name':'charlie'},{'id':'4','name':'delta'}] order = ["2", "3", "1", "4"] indexes = dict((idfield, index) for (index, idfield) in enumerate(order)) print sorted(lst, key=lambda d: indexes[d["id"]]) # [{'id': '2', 'name': 'bravo'}, {'id': '3', 'name': 'charlie'}, {'id': '1', 'name': 'alfa'}, {'id': '4', 'name': 'delta'}]
And here are summarized:
def my_ordered(it, wanted_order, key): indexes = dict((value, index) for (index, value) in enumerate(wanted_order)) return sorted(it, key=lambda x: indexes[key(x)]) import operator print my_ordered(lst, order, operator.itemgetter("id"))
source share