Linux运维进阶-Python,Docker,Shell

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

2020-08-12  本文已影响0人  My熊猫眼

本文非原创,转载自 无限遍历,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中获取数据

上一篇下一篇

猜你喜欢

热点阅读