[英]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.