有没有被嵌套dict字典烦恼过,我被烦扰过,such as{‘a’:[{‘hello’:{‘bool’:‘yes’},‘good’:‘python’},{‘yes’:‘good’}],‘b’:‘but’}
如何在不知道hello这个key的情况下提取’bool’:‘yes’,这个问题曾经非常困扰我,但最近,我找到了一个非常好的解决方法。
上代码
def get_target_value(key, dic, tmp_list=[]):
"""
:param key: 目标key值
:param dic: JSON数据
:param tmp_list: 用于存储获取的数据
:return: list
"""
if not isinstance(dic, dict) or not isinstance(tmp_list, list): # 对传入数据进行格式校验
return 'argv[1] not an dict or argv[-1] not an list '
if key in dic.keys():
tmp_list.append(dic[key]) # 传入数据存在则存入tmp_list
else:
for value in dic.values(): # 传入数据不符合则对其value值进行遍历
if isinstance(value, dict):
get_target_value(key, value, tmp_list) # 传入数据的value值是字典,则直接调用自身
elif isinstance(value, (list, tuple)):
_get_value(key, value, tmp_list) # 传入数据的value值是列表或者元组,则调用_get_value
return tmp_list
def _get_value(key, val, tmp_list):
for val_ in val:
if isinstance(val_, dict):
get_target_value(key, val_, tmp_list) # 传入数据的value值是字典,则调用get_target_value
elif isinstance(val_, (list, tuple)):
_get_value(key, val_, tmp_list) # 传入数据的value值是列表或者元组,则调用自身
这个代码感觉非常有意义,能在不知道中间键的情况下提取到自己想要的嵌套字典内的键值对。
如果这篇文章对你有帮助,请关注我的公众号。谢谢大家了。