繁体   English   中英

嵌套字典中带有yield和return的Python递归

[英]Python recursion with yield and return in nested dictionary

我试图在递归函数中学习yield和return的使用。 我有一个嵌套字典,我正在寻找一个特定的值。

使用“yield”时,以下函数运行正常并成功返回找到的值:

def findvalue (value, document):
    if isinstance (document, list):
        for d in document:
            for result in findvalue(value, d):
                yield result
    if isinstance (document, dict):
        for k,v in document.items():
            if v == value:
                yield v
            elif isinstance (v, dict):
                for result in findvalue(value, v):
                    yield result
            elif isinstance (v, list):
                for d in v:
                    for result in findvalue(value, d):
                        yield result

我理解生成器如何工作以及为什么yield会在上面的代码中完成它的工作。 现在,如果我使用相同的代码,但返回并在那里检查以检查空返回,我仍然以“NoneType”迭代问题结束,因为在这个代码中返回一个空结果:

def valuefind (value, document):
    if isinstance (document, list):
        for d in document:
            for result in valuefind(value, d):
                if result is not None:
                    return result          
    if isinstance (document, dict):
        for k, v in document.items():
            if v == value:
                return v
            elif isinstance (v, dict):
                for result in valuefind(value, v):
                    if result is not None:
                        return result
            elif isinstance (v, list):
                for d in value:
                    for result in valuefind(value, d):
                        if result is not None:
                            return result

我在这里错过了什么?

我相信你可以改变这个:

for result in valuefind(value, v):
                    if result is not None:
                        return result

对此:

return valuefind(value, v)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM