一个非泛化的解决方案:
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'}]
这里概括:
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"))