Make a mapping from 8 to 0, from 7 to 1, ..., from 11 to 5, using enumerate :
>>> order = [8,7,5,9,10,11] >>> list_of_dct = [{'value':11}, {'value':8}, {'value':5}, {'value':7}, {'value':10}, {'value':9}] >>> sort_keys = {item: i for i, item in enumerate(order)} >>> sort_keys {5: 2, 7: 1, 8: 0, 9: 3, 10: 4, 11: 5}
And use it as a sorting key:
>>> list_of_dct.sort(key=lambda d: sort_keys.get(d['value'], len(sort_keys))) >>> list_of_dct [{'value': 8}, {'value': 7}, {'value': 5}, {'value': 9}, {'value': 10}, {'value': 11}]
use sort_keys.get(..) instead of sort_keys[..] to prevent KeyError if the value is misisng in order .
source share