函数返回的值是None,并且无法返回第一个键

时间:2018-07-23 17:56:29

标签: python recursion

我这里有一个看似简单的递归函数,它遍历字典字典。我想像已经在打印我的值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)

2 个答案:

答案 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”