zoukankan      html  css  js  c++  java
  • 输入json串,返回字典,字典值仅包括json最底层数据

    需求:输入以下json串,返回字典,字典值仅包括json最底层数据
    输入:my_dict = {
    "name":"alien",
    "country":"china",
    "other":{
    "age":"18",
    "gender":"man"
    },
    "school":"HLW"
    }
    输出:{'country': 'china', 'school': 'HLW', 'age': '18', 'name': 'alien', 'gender': 'man'}

     1、 背景知识

      1)item(),遍历字典

      2)isinstance(),判断对象的变量类型

    2、思路

    获取json中key和value值,判断如果value是不是字典类型,则循环递归获取key和value值

    3、获取json最底层数据(一)

    def read_json_only1(dict_str):
        dict_result = {}
        for k,v in dict_str.items():
            if isinstance(v,dict):      #判断如果value是字典类型,则提取字典中的key和value
                for k2,v2 in v.items():
                    dict_result[k2]=v2
            else:
                dict_result[k] = v
        print dict_result
    
    if __name__ == '__main__':
        read_json_only1(my_dict)

    输入:

    my_dict = {
    "name":"alien",
    "country":"china",
    "other":{
    "age":"18",
    "gender":"man"
    },
    "school":"HLW"
    }

    输出:{'country': 'china', 'school': 'HLW', 'age': '18', 'name': 'alien', 'gender': 'man'}

    4、发现上面方法只能满足只有一到两层的情况,如果两层下面的value 还是字典,就没法获取到,于是打个问号,能否用递归方法实现

    如:输入串为

    my_dict = {
    "name":"alien",
    "country":"china",
    "other":{
    "age":"18",
    "gender":"man",
    "other":{
    "address":"beijing",
    "phone":"13800138000"
    }
    },
    "school":"HLW"
    }

    输出结果为:{'school': 'HLW', 'name': 'alien', 'country': 'china', 'age': '18', 'other': {'phone': '13800138000', 'address': 'beijing'}, 'gender': 'man'}

    5、优化,使用递归获取获取json最底层数据(二)

    dict_result = {}
    def read_json_only(dict_str):
        for k,v in dict_str.items():
            if isinstance(v, dict):
                read_json_only(v)
            else:
                dict_result[k] = v
        return dict_result
    
    if __name__ == '__main__':
       print read_json_only(my_dict)

    输出:{'school': 'HLW', 'name': 'alien', 'country': 'china', 'age': '18', 'phone': '13800138000', 'gender': 'man', 'address': 'beijing'}

    注意,for循环过程return只返回第一次满足条件的结果,会出现其余的没有返回的问题。



  • 相关阅读:
    localStorage存储数组以及取数组方法
    jq选择CheckBox进行排序
    js定时函数,定时改变字体的大小
    JQuery Datatable用法
    WebSocket实战
    代码段
    黎活明给程序员的忠告 收藏
    雅砻江后勤项目经验总结
    Java泛型方法
    回忆,梦的开始
  • 原文地址:https://www.cnblogs.com/cailingsunny/p/10631757.html
Copyright © 2011-2022 走看看