Python dictionaries are unordered. You can get the desired results in the form of list
>>> d = {'10': -10, 'ZT21': 14, 'WX21': 12, '2': 15, '5': -3, 'UM': -25} >>> keyorder = ['ZT21', '10', 'WX21', 'UM', '5', '2'] >>> sorted(d.items(), key=lambda i:keyorder.index(i[0])) [('ZT21', 14), ('10', -10), ('WX21', 12), ('UM', -25), ('5', -3), ('2', 15)]
or as an OrderedDict
>>> from collections import OrderedDict >>> OrderedDict(sorted(d.items(), key=lambda i:keyorder.index(i[0]))) OrderedDict([('ZT21', 14), ('10', -10), ('WX21', 12), ('UM', -25), ('5', -3), ('2', 15)])
If you do a lot of them, it will be more efficient to use a dict for the keyword
>>> keyorder = {k:v for v,k in enumerate(['ZT21', '10', 'WX21', 'UM', '5', '2'])} >>> OrderedDict(sorted(d.items(), key=lambda i:keyorder.get(i[0]))) OrderedDict([('ZT21', 14), ('10', -10), ('WX21', 12), ('UM', -25), ('5', -3), ('2', 15)])