方法说明
递归实现对字典相应的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