递归

 

def get_value_from_dict(key, tdict):
    """
    从Json中获取key值,
    param key:
    param tdict:字典
    param tem_list:
    return:
    """
    #if not isinstance(tdict, dict):
    #    return tdict + "is not dict"
    if key in tdict.keys():
        print(1)
        return tdict[key]
    else:
        for value in tdict.values():
            if isinstance(value, dict):
                print(2,value)
                tmp = get_value_from_dict(key, value)
                print('tmp',tmp)
                if tmp == None:
                    continue
                else:
                    return get_value_from_dict(key, value)
            elif isinstance(value, (list, tuple)):
                print(3)
                tmp = get_value_from_list(key, value)
                if tmp == None:
                    continue
                else:
                    return get_value_from_list(key, value)
    return None



def get_value_from_list(key, tlist):
    """
    从list或tuple中查找key的value值
    :param key:
    :param tdict:
    :param tem_list:
    :return:
    """
    for value in tlist:
        if isinstance(value, (list, tuple)):
            print(4)
            tmp = get_value_from_list(key,value)
            if tmp == None:
                continue
            else:
                return get_value_from_list(key,value)
        elif isinstance(value, dict):
            print(5)
            tmp = get_value_from_dict(key, value)  
            if tmp == None:
                continue
            else:
                return get_value_from_dict(key, value)
    return None


data = {'success': True, 'id': 'WF2020040217390412121390', 'result_desc': {'ANTIFRAUD_MODEL': {'6cddcf68e3a68b09': {'scorecard_reason_code': '申贷平台数变化率:5|关联手机设备数变化率:4|网贷平台绑卡事件数变化率:2|关联手机归属地变化率:2|关联社交账号数变化率:1|身份信息', 'model_version': '5', 'antifraud_model_score': 77}}, 'ANTIFRAUD': {'final_score': 80, 'risk_items': [{'rule_id': 5930275, 'policy_score': 80, 'score': 80, 'policy_mode': 'Weighted', 'decision': 'Accept', 'policy_decision': 'Reject', 'policy_name': '反欺诈模型智察分', 'risk_name': '智察分大于等于60分'}, {'rule_id': 5930097, 'policy_score': 5, 'score': 5, 'policy_mode': 'Weighted', 'decision': 'Accept', 'policy_decision': 'Accept', 'policy_name': '反欺诈规则', 'risk_name': '7天内身份证或手机号申请次数过多', 'risk_detail': [{'frequency_detail_list': [{'note': '7天内手机号申请次数', 'dim_type': 'accountMobile', 'count': '5', 'detail': '7天内手机号申请次数:5'}], 'type': 'frequency_detail'}]}], 'final_decision': 'REJECT'}}}

get_value_from_dict('detail',data)

 注意两函数中这个部分

 

 

posted on 2020-04-13 21:26  静静的白桦林_andy  阅读(228)  评论(0)    收藏  举报

导航