递归实现对字典key赋值


方法说明

递归实现对字典相应的key赋值。支持对dict[list]或dict{dict}类型获取key,并对key赋值。


方法实现

def give_target_value(key: str, val: all, dic: dict) -> dict:
    """
    递归dic查找目标key,并对key赋值val
    :param key: 目标key值
    :param dic: 字典
    :return: dic[key]
    """
    if not isinstance(dic, dict):  # 对传入数据进行格式校验
        return dic
    if key in dic.keys():
        if not dic[key]:    # 仅当key的值为空时赋值
            dic[key] = val
    for value in dic.values():
        if not value:  # 传入数据不符合则对其value值进行遍历
            continue
        if isinstance(value, dict):
            ret = give_target_value(key, val, value)  # 传入数据的value值是字典,则直接调用自身
            if ret is not None:
                return ret
        elif isinstance(value, (list, tuple)):
            ret = _give_value(key, val, value)  # 传入数据的value值是列表或者元组,则调用_get_value
            if ret is not None:
                return ret


def _give_value(key: str, val: all, val_list: list):
    """
    :param key: 目标key值
    :param val_list: JSON数据
    :return:
    """
    for val_ in val_list:
        if isinstance(val_, dict):
            ret = give_target_value(key, val, val_)  # 传入数据的value值是字典,则调用get_target_value
            if ret is not None:
                return ret
        elif isinstance(val_, (list, tuple)):
            ret = _give_value(key, val, val_)  # 传入数据的value值是列表或者元组,则调用自身
            if ret is not None:
                return ret
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值