python 从多层字典嵌套中提取内容

时间:2025-03-19 17:15:31
import json
1. 根据路径取值
def check_key_dict_value(json_data,defalut_value,keys=[]):
    if not json_data: return defalut_value
    for key in keys:
        if key in json_data.keys():
            json_data = json_data[key]
        else:
            return defalut_value
    return json_data

json_data0={'key1':{'key2':{'key3':93,'key4':15}}}
result=check_key_dict_value(json_data0,defalut_value=0,keys=['key1','key2','key3'])

2. 未知路径取单个值
def check_key_dict_list_value(json_data,key):
    if isinstance(json_data, list):
        for i in json_data:
            if key in str(i): return check_key_dict_list_value(i,key=key)
    elif isinstance(json_data,dict):
        for k,v in json_data.items():
            if k == key:
                return v
            if key in str(v):
                return check_key_dict_list_value(v,key=key)
    else:
        try:
            return check_key_dict_list_value((json_data),key=key)
        except:return

json_data1={'key1':{'key2':[{'key3':93,'key4':15}]}}

json_data1={'key1':{'key2':[{'key3':93,'key4':15}]}}
result1 = check_key_dict_list_value(json_data1,key='key4')
print(result1)

3. 未知路径取所有key名的值

def check_key_dict_list_value(json_data, key, lis):
    if isinstance(json_data, list):
        for i in json_data:
            if key in str(i):
                check_key_dict_list_value(i, key,lis)
    elif isinstance(json_data, dict):
        if json_data.get(key) != None:
            (json_data[key])
        else:
            for k, v in json_data.items():
                if key in str(v):
                    check_key_dict_list_value(v, key,lis)
    else:
        try:
            check_key_dict_list_value((json_data),key,lis)
        except:
            return
lis = []
json_data1={'key1':{'key2':[{'key3':93,'key4':15},{'key3':93,'key4':15}]}}
check_key_dict_list_value(json_data1, 'key4', lis)
print(lis)