我这里有一个看似简单的递归函数,它遍历字典字典。我想像已经在打印我的值v一样,我想返回与此key:value对关联的第一个键。在这种情况下,代码输出v = 'hi'
和None
。我不确定为什么它总是返回None。我将k变量设置为函数外部的空字符串。在这种情况下,K应该为'six'
。另外,我希望代码以某种方式返回'five'
,因为它是第一个键,但是我不确定是否可行。有人可以协助吗?如有任何混淆,我也表示歉意。在这里,代码应该返回k ='six'。我不确定如何返回{'six': 'hi'}
的密钥。
my_dict = {'one': {'two': 'hello'}, 'three': {'four': 'hey'}, 'five': {'six': 'hi'}}
k = ''
numero = 'six'
def find_location(d):
for k, v in d.iteritems():
if isinstance(v, dict):
find_location(v)
else:
if numero == k:
print 'this is k: {}'.format(k)
print v
return k
def print_return(func):
print func
x = find_location(my_dict)
print_return(x)
答案 0 :(得分:6)
您必须将递归调用的结果传递给堆栈:
if isinstance(v, dict):
return find_location(v) # note the 'return'
在没有return
的情况下,该行只是调用该函数但不返回其结果(或结束周围的函数)的语句。而且,如果没有return语句,函数将隐式返回None
。
答案 1 :(得分:2)
另一个答案是正确的,您不会从函数递归时返回结果。
但是,有了这个增加,您的函数仍然不会返回您想要的答案,因为它永远不会超出循环的第一次迭代。如果是第一个key != 'six'
,该函数仍将返回None
。
def find_location(d):
for k, v in d.items():
if isinstance(v, dict):
key = find_location(v)
if (key == numero):
print(v)
return k
else:
return k
上面的函数显示“ hi”并返回“ 5”