Python字典嵌套查询,字典多层嵌套含列表,使用递归查询键的值

现在有某个字典需要查询某个键的值

但是字典有嵌套字典,又嵌套列表。
所以写了个查询函数,该函数使用递归求值,多个相同的值也能返回,返回类型为列表

def find_disc(will_find_dist,find_keys):#will_find_dist要查找的字典,find_keys要查找的keys
    
    value_found=[]
    if(isinstance(will_find_dist,(list))):#含有列表的值处理
        if (len(will_find_dist)>0):
            for now_dist in will_find_dist:
                found=find_disc(now_dist,find_keys)
                if(found):
                    value_found.extend(found)
            return value_found
                
            
    if(not isinstance(will_find_dist,(dict))):#没有字典类型的了
        return 0
    
    else:#查找下一层
        dict_key=will_find_dist.keys()
        #print (dict_key)
        for i in dict_key:
            if(i==find_keys):
                value_found.append(will_find_dist[i])
            found=find_disc(will_find_dist[i],find_keys)
            if(found):
                value_found.extend(found)
            
        return value_found

返回值为一个列表

例如

def find_disc(will_find_dist, find_keys):  # will_find_dist要查找的字典,find_keys要查找的keys,found找到值存放处
    value_found = []
    if(isinstance(will_find_dist, (list))):  # 含有列表的值处理
        if (len(will_find_dist) > 0):
            for now_dist in will_find_dist:
                found = find_disc(now_dist, find_keys)
                if(found):
                    value_found.extend(found)
            return value_found

    if(not isinstance(will_find_dist, (dict))):  # 没有字典类型的了
        return 0

    else:  # 查找下一层
        dict_key = will_find_dist.keys()
        #print (dict_key)
        for i in dict_key:
            if(i == find_keys):
                value_found.append(will_find_dist[i])
            found = find_disc(will_find_dist[i], find_keys)
            if(found):
                value_found.extend(found)

        return value_found



a = {'A': {'A1': {'B': {'B1': ['b1', 'b2', 'b3'],
                        'B2': ['d1', 'd2', 'd3', {'n4': 'ccc2'}]},
                  'C': {'C1': ['a1', 'a2', 'a3'],
                        'C2': ['n1', {'n2': 'aaaa'}, {'n3': 'bbbb'}, {'n4': 'ccc'}],
                        'C3': ['x1', 'x2', 'x3', 'x4']}}}}
print(find_disc(a, 'n2'))
print(find_disc(a, 'C1'))
print(find_disc(a, 'n3'))
print(find_disc(a, 'n4'))

输出如下
[‘aaaa’]
[[‘a1’, ‘a2’, ‘a3’]]
[‘bbbb’]
[‘ccc2’, ‘ccc’]

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值