Matan Avitan
Matan Avitan

Reputation: 21

python nested dict convert from regular json to nest

I am stuck on convert jsons from regular (key-value) to nested. for example:

j = { 'a': 5,
      'b': 3,
      'c.c1': 2,
      'c.c2':5,
      'd.dd.d1': 0,
      'd.dd.d2':9
    }

and I need to get:

new_j = { 
      'a': 5,
      'b': 3,
      'c': 
           {'c1': 2,
            'c2':5}
      'd': 
           {'dd' :
                 {'d1': 0,
                  'd2': 9}
            },
    }

there are easy method to do this?

Upvotes: 1

Views: 52

Answers (2)

MohitC
MohitC

Reputation: 4821

Try this:

d = {}
def setValue(dic, keys, value):
    for key in keys[:-1]:
        dic = dic.setdefault(key, {})
    dic[keys[-1]] = value
for k,v in j.items():
    setValue(d, k.split('.'), v)

Output:

{
    "a": 5,
    "c": {
        "c2": 5,
        "c1": 2
    },
    "b": 3,
    "d": {
        "dd": {
            "d2": 9,
            "d1": 0
        }
    }
}

Upvotes: 1

Daan Klijn
Daan Klijn

Reputation: 1694

How about this?

j_new = {}
for key,value in j.items():
      keys = key.split('.')
      level = j_new
      for key in keys[:-1]:
          if key not in level:
              level[key]={}
          level = level[key]
      level[keys[-1]]=value

print(j_new)

Which returns:

{'a': 5, 'b': 3, 'c': {'c1': 2, 'c2': 5}, 'd': {'dd': {'d1': 0, 'd2': 9}}}

Upvotes: 1

Related Questions