Проблема в алгоритме рекурсивного поиска
d={'global': {'a': 10, 'b': 4, 'func': {'n': "foo", 'x': 'spam', 'func_f': {"d": 0}, 'min': {"c": 5}} }}
def search(d, skey):
print("search( %s )" % d)
for i in d:
if i==skey:
print("return %s" % d[i])
return d[i]
else:
if type(d[i])==dict:
return search(d[i], skey)
print(search(d, 'func_f'))
print(search(d, 'min'))
Output:
search( {'global': {'a': 10, 'b': 4, 'func': {'n': 'foo', 'x': 'spam', 'func_f': {'d': 0}, 'min': {'c': 5}}}} )
search( {'a': 10, 'b': 4, 'func': {'n': 'foo', 'x': 'spam', 'func_f': {'d': 0}, 'min': {'c': 5}}} )
search( {'n': 'foo', 'x': 'spam', 'func_f': {'d': 0}, 'min': {'c': 5}} )
return {'d': 0}
{'d': 0}
search( {'global': {'a': 10, 'b': 4, 'func': {'n': 'foo', 'x': 'spam', 'func_f': {'d': 0}, 'min': {'c': 5}}}} )
search( {'a': 10, 'b': 4, 'func': {'n': 'foo', 'x': 'spam', 'func_f': {'d': 0}, 'min': {'c': 5}}} )
search( {'n': 'foo', 'x': 'spam', 'func_f': {'d': 0}, 'min': {'c': 5}} )
search( {'d': 0} )
None # хотя я ожидал {"c": 5}
Ответы (1 шт):
Автор решения: Danis
→ Ссылка
возвращать значение надо лишь в том случае если функция что то нашла
d={'global': {'a': 10, 'b': 4, 'func': {'n': "foo", 'x': 'spam', 'func_f': {"d": 0}, 'min': {"c": 5}} }}
def search(d, skey):
print("search( %s )" % d)
for i in d:
if i==skey:
print("return %s" % d[i])
return d[i]
else:
if type(d[i])==dict:
res = search(d[i], skey)
if res != None:
return res
print(search(d, 'func_f'))
print(search(d, 'min'))