最近一段时间,公司在着手开发一些测试相关工具,个人参与过程中遇到了字典列表多层嵌套的取值问题,关于此问题的解决方案,自己的一些拙见,敬请指正。

# 获取字典中的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


↙↙↙阅读原文可查看相关链接,并与作者交流