Home > Back-end >  how to recursively check a nested dictionary keys and return specific value
how to recursively check a nested dictionary keys and return specific value

Time:12-13

i have a function with nested dictionary and a specipic number(in the code that i wrote it equals 1) i need to write a recursive function that goes over the dictionary and returns only the values mapped to the keys that equals the specipic chosen number here is what i wrote

def nested_get(d, key):
res=[]
for i in d.keys():
    if i == key:
        res.append(d[i])
        return res
    if type(d[i]) is dict:
        another = nested_get(d[i], key)
        if another is not None:
            return res   another
return []

print(nested_get({1:{1:"c",2:"b"},2:"b"},1))

i need it to return ['c'] but instead it returns [{1:'c',2:'b'}]

CodePudding user response:

Your program never makes it to the if type(d[i]) is dict: because it returns in the first if statement in the first iteration of the for loop.

Check if the value stored inside the key is a dict first, and don't return until after the if statements. You don't need the return [] at the end because res will be empty if nothing was appended to it.

def nested_get(d, key):
    res=[]
    for i in d.keys():
        if type(d[i]) is dict:
            res.extend(nested_get(d[i], key))
        else:
            if i == key:
                res.append(d[i])
    return res

print(nested_get({1:{1:"c",2:"b"},2:"b"},1))
print(nested_get( {1:{1:"a",2:"b"},2:{1:{1:"c",2:"b"},2:"b"}},1))
  • Related