python вложенный dict конвертируется из обычного json в гнездо - PullRequest
1 голос
/ 23 апреля 2020

Я застрял при конвертации jsons из обычного (key-value) во вложенный. например:

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

и мне нужно получить:

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

Есть простой способ сделать это?

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Попробуйте:

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)

Вывод:

{
    "a": 5,
    "c": {
        "c2": 5,
        "c1": 2
    },
    "b": 3,
    "d": {
        "dd": {
            "d2": 9,
            "d1": 0
        }
    }
}
1 голос
/ 23 апреля 2020

Как насчет этого?

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)

Что возвращает:

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