Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-JSON到嵌套和扁平化字典_Python_Dictionary_Recursion_Nested_Flatten - Fatal编程技术网

Python-JSON到嵌套和扁平化字典

Python-JSON到嵌套和扁平化字典,python,dictionary,recursion,nested,flatten,Python,Dictionary,Recursion,Nested,Flatten,我是Python新手,目前正在尝试阅读以下JSON: "level1_key1":"1", "level1_key2":{ "level2_key1":"2", "level2_key2":{ "level3_key1":"Max depth" } } 然后将其放入字典(现在已经完成),最后显示为嵌套和扁平(我使用的是Python 3.6)。我想用递归来实现它,并避免使用第三方库。我尝试了StackOverflow的所有建议,但无法使结果看起来像任务中的

我是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'}

我非常感谢任何帮助。提前谢谢

请尝试下面的代码。它应该能解决你的疑问

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 depth','level1_key1':'1'}


您可以在递归中使用
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'}

你好,谢谢你的回答。不幸的是,当我尝试执行时,我得到了以下错误:回溯(最后一次调用):文件“File.py”,第73行,打印中(process_dict(example_dict))文件“File.py”,第64行,process_dict for key,val in dict_val.iteritems():AttributeError:'dict'对象没有属性'iteritems',这可能是Python版本的某些东西吗?我刚刚看到iteritems()现在是Python 3上的items()。对其进行了编辑,但未获得所需的结果。谢谢你的回答,我会继续努力的。你得到了什么结果?你好。这是代码和结果的要点-删除打印键、值和try的print语句。我也更新了上面的内容。谢谢你的回答。不幸的是,通过这段代码,我得到了以下信息:{'level1_-key1':'1','level2_-key1':'2','level3_-key1':'恭喜你达到了最高的权限'}可能是我这方面的问题,我做错了。。。