I have an input dictionary:
d={'AM-tv': 1.2,
'AM-rs': 1.3,
'AM-pq': 1.2,
'BR-MN': 1.3,
'BR-tN': 1.3,
'BR-tq': 1.4}
Expected Output
d={'AM':{'tv':1.2,'rs':1.3,'pq':1.2},'BR':{'MN':1.3,'tN':1.3,'tq':1.4}
Is there any way to produce nested dictionary from pairs of the input dictionary?
CodePudding user response:
One way is to split the keys and use dict.setdefault
to initialize inner dicts:
out = {}
for k,v in d.items():
o,i = k.split('-')
out.setdefault(o, {})[i] = v
Output:
{'AM': {'tv': 1.2, 'rs': 1.3, 'pq': 1.2},
'BR': {'MN': 1.3, 'tN': 1.3, 'tq': 1.4}}
CodePudding user response:
You could loop over the items()
which will give you key/value pairs, split()
the key and assign. setdefault
is helpful here to initialize the inner dicts with a new empty dict when it sees an outer key for the first time:
d = {
'AM-tv': 1.2,
'AM-rs': 1.3,
'AM-pq': 1.2,
'BR-MN': 1.3,
'BR-tN': 1.3,
'BR-tq': 1.4
}
new_d = {}
for k, v in d.items():
k1, k2 = k.split('-')
new_d.setdefault(k1, {})[k2] = v
new_d
will be:
{'AM': {'tv': 1.2, 'rs': 1.3, 'pq': 1.2},
'BR': {'MN': 1.3, 'tN': 1.3, 'tq': 1.4}}