Python - 嵌套和扁平字典的JSON

时间:2018-05-20 10:53:24

标签: python dictionary recursion nested flatten

我是Python新手,目前正在尝试阅读以下JSON:

<?php
$date = date('M d, Y H:i:s', strtotime('19-6-2018 15:00:00')); 
$date1 = date('M d, Y H:i:s', strtotime('8-3-2019 15:37:25'));  
echo json_encode(
    array(
        'first' => $date,
        'second' => $date1
    )
);

然后将它放在字典中(现在完成),最后将其显示为嵌套和展平(我使用Python 3.6)。我希望通过递归来避免使用第三方库。我尝试了StackOverflow的所有建议,但不能使结果看起来像任务中的那个:

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

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

2 个答案:

答案 0 :(得分:0)

请尝试以下代码。它应该解决你的问题。

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)


答案:

  

{&#39; level2_key1&#39;:&#39; 2&#39;,&#39; level3_key1&#39;:&#39;最大深度&#39;,&#39; level1_key1&#39;: &#39; 1&#39;}

答案 1 :(得分:0)

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