I have a dictionary like this:
data = {'a': {'b': {'c': 1}}, 'd': {'e': 1}}
I want to transform it to:
data = {'a.b': {'c': 1}, 'd': {'e': 1}}
Basically I want to flatten the dictionary to depth 2.
Currently I am using the following functions:
def flatten(metrics, parent_key='', sep='.'):
items = []
for k, v in metrics.items():
new_key = parent_key + sep + k if parent_key else k
if isinstance(v, collections.MutableMapping):
items.extendflatten(v, new_key, sep=sep).items())
else:
items.append((new_key, v))
return dict(items)
def dictify_again(self, metrics):
items = {}
for k, v in metrics.items():
keys = k.split('.')
k1 = '.'.join(keys[:-1])
k2 = keys[-1]
if k1 in items:
items[k1][k2] = v
else:
items[k1] = {k2 : v}
return items
Is there a better way?
Thanks.