0

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.

Arindam Choudhury
  • 2,816
  • 2
  • 18
  • 22

0 Answers0