簡體   English   中英

Python - 收集遞歸 function 的 output

[英]Python - collect output of recursive function

我寫了一個 function 設計來壓平 json。 function 遞歸工作 - 如果鍵值對的值不是json,則返回鍵值對,否則,將在值上再次調用 function:

def flatten_json(j):
    for k, v in j.items():
        if isinstance(v, dict):
            flatten_json(v)
        else:
            yield (k,v)

flat_json = {x[0]: x[1] for x in flatten_json(j)}

這個想法是每當 function yield一個元組時,它就會被收集到 flat_json 字典中。 就目前而言,嵌套輸出被忽略 - 只有頂級鍵值對出現在 flat_json 中。

這正是yield from的用途:),通過從生成器內部調用生成器(無論是否是遞歸調用)來逐個生成元素。

嘗試:

def flatten_json(j):
    for k, v in j.items():
        if isinstance(v, dict):
            yield from flatten_json(v)
        else:
            yield (k,v)


j = {'foo': 'bar', 'foo1': 'bar1', 'nest1': {'foo2': 'bar2'}}
flat_json = {x[0]: x[1] for x in flatten_json(j)}
print(flat_json)

Output:

{'foo': 'bar', 'foo1': 'bar1', 'foo2': 'bar2'}

此處運行示例: https://ideone.com/Z5aO9V

像正常數據一樣產生它:

yield (k, flatten_json(v))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM