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

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.loads(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:
            lis.append(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.loads(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)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值