Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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
Api 使用未知键和未知数量的嵌套字典在字典中迭代_Api_Dictionary_Parsing_Nested_Python 3.7 - Fatal编程技术网

Api 使用未知键和未知数量的嵌套字典在字典中迭代

Api 使用未知键和未知数量的嵌套字典在字典中迭代,api,dictionary,parsing,nested,python-3.7,Api,Dictionary,Parsing,Nested,Python 3.7,有没有更好的解析API响应的方法,在这种方法中,我不知道可以得到多少嵌套dict API响应的更改现在抛出嵌套的dict。获取响应的所有代码都是基于dict的 我发现了一个可怕的方法,但有时我会得到5级嵌套字典 示例响应示例: "MalwareProtectionStatus": "disabled", "malware": { "QuarantineStatus":

有没有更好的解析API响应的方法,在这种方法中,我不知道可以得到多少嵌套dict

API响应的更改现在抛出嵌套的dict。获取响应的所有代码都是基于dict的

我发现了一个可怕的方法,但有时我会得到5级嵌套字典

示例响应示例:

                    "MalwareProtectionStatus": "disabled",
                    "malware": {
                        "QuarantineStatus": "Disabled",
                        "config": {
                            "av": {
                                "status": "Disabled",
                                "quarantine": {
                                    "status": "Disabled"
                                }
                            },
                            "mg": {
                                "status": "Disabled",
                                "quarantine": {
                                    "status": "Disabled"
                                }
                            }
                        }
                    }
我用输入数据编写了代码,就像真实的结构一样。但这是一种可怕的方法,如果API响应得到更多级别的嵌套dict。。。。然后。。。需要更可怕的代码,请看

我糟糕的代码(为了更好地理解而编辑):

代码抛出:

{'level-a1': '1', 'level-a2_level-b1': '21', 'level-a2_level-b2': {'level-c1': '31', 'level-c2': {'level-d1': '41'}}}
{'level-a1': '1', 'level-a2_level-b1': '21', 'level-a2_level-b2_level-c1': '31', 'level-a2_level-b2_level-c2': {'level-d1': '41'}}
{'level-a1': '1', 'level-a2_level-b1': '21', 'level-a2_level-b2_level-c1': '31', 'level-a2_level-b2_level-c2_level-d1': '41'}
它是有效的。。。但只有当我知道嵌套字典的级别时,有时我会看到5个级别

有没有更好的方法来实现这一点的想法???

在这里可以找到更好的视图:

输出:

{'level-1': '1', 'level-2_leve2-1': '21', 
'level-2_leve2-2_leve3-1': '31', 
'level-2_leve2-2_leve3-2_leve4-1': '41', 
'level-2_leve2-2_leve3-2_level4-2_level5-1': '51', 
'level-2_leve2-2_leve3-2_level5-2': '52'}
def flatten_dict(dd, separator='_', prefix=''):
    return {prefix + separator + k if prefix else k: v
             for kk, vv in dd.items()
             for k, v in flatten_dict(vv, separator, kk).items()
             } if isinstance(dd, dict) else { prefix : dd }

api_response = {'level-1': '1', 'level-2': {'leve2-1': '21',
                    'leve2-2': {'leve3-1': '31', 'leve3-2': {'leve4-1': '41',
                    'level4-2': {'level5-1': '51'}, 'level5-2': '52'}}}}


print(flatten(api_response))
{'level-1': '1', 'level-2_leve2-1': '21', 
'level-2_leve2-2_leve3-1': '31', 
'level-2_leve2-2_leve3-2_leve4-1': '41', 
'level-2_leve2-2_leve3-2_level4-2_level5-1': '51', 
'level-2_leve2-2_leve3-2_level5-2': '52'}