簡體   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