美文网首页Linux运维进阶-Python,Docker,Shell
python通过key值获取复杂字典中目标数据

python通过key值获取复杂字典中目标数据

作者: My熊猫眼 | 来源:发表于2020-08-12 11:46 被阅读0次

    本文非原创,转载自 无限遍历,Python实现在多维嵌套字典、列表、元组的JSON中获取数据

    具体思路如下:

    新建两个函数A和B,函数 A处理字典数据,被调用后,判断传递的参数,如果参数为字典,则调用自身;
    如果是列表或者元组,则调用列表处理函数B;
    函数 B处理列表,被调用后,判断传递的参数,如果参数为列表或者元组,则调用自身;
    如果是字典,则调用字典处理函数A;

    # coding:utf-8 
    """ 
    @author:Bingo.he 
    @file: get_target_value.py 
    @time: 2017/12/22 
    """
    def get_target_value(key, dic, tmp_list):
        """
        :param key: 目标key值
        :param dic: JSON数据
        :param tmp_list: 用于存储获取的数据
        :return: list
        """
        if not isinstance(dic, dict) or not isinstance(tmp_list, list):  # 对传入数据进行格式校验
            return 'argv[1] not an dict or argv[-1] not an list '
     
        if key in dic.keys():
            tmp_list.append(dic[key])  # 传入数据存在则存入tmp_list
        else:
            for value in dic.values():  # 传入数据不符合则对其value值进行遍历
                if isinstance(value, dict):
                    get_target_value(key, value, tmp_list)  # 传入数据的value值是字典,则直接调用自身
                elif isinstance(value, (list, tuple)):
                    _get_value(key, value, tmp_list)  # 传入数据的value值是列表或者元组,则调用_get_value
        return tmp_list
    
    def _get_value(key, val, tmp_list):
        for val_ in val:
            if isinstance(val_, dict):  
                get_target_value(key, val_, tmp_list)  # 传入数据的value值是字典,则调用get_target_value
            elif isinstance(val_, (list, tuple)):
                _get_value(key, val_, tmp_list)   # 传入数据的value值是列表或者元组,则调用自身
    

    使用举例:

    test_dic = {'a': '1', 'b': '2', 'c': {'d': [{'e': [{'f': [{'v': [{'g': '6'}, [{'g': '7'}, [{'g': 8}]]]}, 'm']}]}, 'h', {'g': [10, 12]}]}}
    get_target_value("g",test_dict, r_tmp)      
    #r_tmp 为一个空列表,用于保存得到的结果。
    #test_dict 是一个字典类型, 也就是查找的范围.
    #“g” 是要找的key 的值;
    

    本文非原创,转载自 无限遍历,Python实现在多维嵌套字典、列表、元组的JSON中获取数据

    相关文章

      网友评论

        本文标题:python通过key值获取复杂字典中目标数据

        本文链接:https://www.haomeiwen.com/subject/ommzihtx.html