最近一段时间,公司在着手开发一些测试相关工具,个人参与过程中遇到了字典列表多层嵌套的取值问题,关于此问题的解决方案,自己的一些拙见,敬请指正。
# 获取字典中的objkey对应的值,适用于字典列表嵌套
# test:字典
# objkey:目标key
# default:找不到时返回的默认值
# tmp_list:数据存储列表
# 字典遍历,遍历数据是字典,自执行,是列表执行列表
# 列表遍历,遍历数据是列表,自执行,是字典执行字典
#key值唯一
def list_get(test,objkey,default,tmp_list):
for i in test:
if isinstance(i,dict):
dict_get(i,objkey,default,tmp_list)
elif isinstance(i,list):
list_get(i,objkey,default,tmp_list)
def dict_get(test,objkey,default,tmp_list):
for k,v in test.items():
if k != objkey:
if isinstance(v,dict):
dict_get(v,objkey,default,tmp_list)
elif isinstance(v,list):
list_get(v,objkey,default,tmp_list)
else:
k == objkey
tmp_list.append(v)
return tmp_list[0]
#test:字典
#objkey:目标key
#objupkey:目标上级key
#key值重复,筛选指定key值
def list_get(test, objkey,objupkey, default, tmp_list):
for i in test:
if isinstance(i, dict):
dict_get(i, objkey,objupkey, default, tmp_list)
elif isinstance(i, list):
list_get(i, objkey,objupkey, default, tmp_list)
def dict_get(test, objkey,objupkey, default, tmp_list):
for k, v in test.items():
if k != objupkey :
if isinstance(v, dict):
dict_get(v, objkey,objupkey, default, tmp_list)
elif isinstance(v, list):
list_get(v, objkey,objupkey, default, tmp_list)
elif k == objupkey :
if isinstance(v, list):
for e in v:
if isinstance(e, dict):
for u,w in e.items():
if u == objkey:
if w != None:
tmp_list.append(w)
elif isinstance(v, dict):
for u, w in v.items():
if u == objkey:
if w != None:
tmp_list.append(w)
return tmp_list