from collections import OrderedDict
d = {
'Benefits': {
1: {
'BEN1': {
'D': [{'description': 'D1'}],
'C': [{'description': 'C1'}]
}
},
2: {
'BEN2': {
'D': [{'description': 'D2'}],
'C': [{'description': 'C2'}]
}
}
}
}
def sort_dict(d):
items = [[k, v] for k, v in sorted(d.items(), key=lambda x: x[0])]
for item in items:
if isinstance(item[1], dict):
item[1] = sort_dict(item[1])
return OrderedDict(items)
#return dict(items)
print(sort_dict(d))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKCmQgPSB7CiAgICAnQmVuZWZpdHMnOiB7CiAgICAgICAgMTogewogICAgICAgICAgICAnQkVOMSc6IHsKICAgICAgICAgICAgICAgICdEJzogW3snZGVzY3JpcHRpb24nOiAnRDEnfV0sCiAgICAgICAgICAgICAgICAnQyc6IFt7J2Rlc2NyaXB0aW9uJzogJ0MxJ31dCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIDI6IHsKICAgICAgICAgICAgJ0JFTjInOiB7CiAgICAgICAgICAgICAgICAnRCc6IFt7J2Rlc2NyaXB0aW9uJzogJ0QyJ31dLAogICAgICAgICAgICAgICAgJ0MnOiBbeydkZXNjcmlwdGlvbic6ICdDMid9XQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgpkZWYgc29ydF9kaWN0KGQpOgogICAgaXRlbXMgPSBbW2ssIHZdIGZvciBrLCB2IGluIHNvcnRlZChkLml0ZW1zKCksIGtleT1sYW1iZGEgeDogeFswXSldCiAgICBmb3IgaXRlbSBpbiBpdGVtczoKICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZW1bMV0sIGRpY3QpOgogICAgICAgICAgICBpdGVtWzFdID0gc29ydF9kaWN0KGl0ZW1bMV0pCiAgICByZXR1cm4gT3JkZXJlZERpY3QoaXRlbXMpCiAgICAjcmV0dXJuIGRpY3QoaXRlbXMpCgpwcmludChzb3J0X2RpY3QoZCkpCg==
OrderedDict([('Benefits', OrderedDict([(1, OrderedDict([('BEN1', OrderedDict([('C', [{'description': 'C1'}]), ('D', [{'description': 'D1'}])]))])), (2, OrderedDict([('BEN2', OrderedDict([('C', [{'description': 'C2'}]), ('D', [{'description': 'D2'}])]))]))]))])