Python - JSON для вложенного и сплющенного словаря - PullRequest
0 голосов
/ 20 мая 2018

Я новичок в Python и сейчас пытаюсь прочитать следующий JSON:

"level1_key1":"1",
"level1_key2":{
    "level2_key1":"2",
    "level2_key2":{
        "level3_key1":"Max depth"
    }
}

, затем поместить его в словарь (уже сделано) и, наконец, показать его как вложенный и сглаженный (яиспользуя Python 3.6).Я хочу сделать это с помощью рекурсии и избегать использования сторонних библиотек.Я перепробовал все предложения от StackOverflow, но не могу сделать результат похожим на результат задачи:

Nested dict: {u'level1_key2': {u'level2_key2': {u'level3_key1': u'Max depth'}, u'level2_key1': u'2'}, u'level1_key1': u'1'}
Flatten dict: {u'level2_key1': u'2', u'level3_key1': u'Max depth', u'level1_key1': u'1'}

Я очень признателен за любую помощь.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Вы можете использовать dict.items в рекурсии:

d =  {u'level1_key2': {u'level2_key2': {u'level3_key1': u'Max depth'}, u'level2_key1': u'2'}, u'level1_key1': u'1'}
def flatten(d):
   _r = [[(a, b)] if not isinstance(b, dict) else flatten(b) for a, b in d.items()]
   return [i for b in _r for i in b]

new_d = dict(flatten(d))

Вывод:

{'level3_key1': 'Max depth', 'level2_key1': '2', 'level1_key1': '1'}
0 голосов
/ 20 мая 2018

Пожалуйста, попробуйте ниже код.Это должно решить ваш запрос.

example_dict = {"level1_key1":"1",
                    "level1_key2":{
                        "level2_key1":"2",
                        "level2_key2":{
                            "level3_key1":"Max depth"
                        }
                     }
                 }   

flatten_dict = {}
def process_dict(dict_val):
    for key, val in dict_val.items():
        if isinstance(val, dict) and val:
            process_dict(val)
        else:
            flatten_dict.update({key:val})
    return flatten_dict

print process_dict(example_dict)


Ответ:

{'level2_key1': '2', 'level3_key1': 'Max глубина', 'level1_key1':' 1 '}

...