gpt4 book ai didi

Python - 收集递归函数的输出

转载 作者:太空宇宙 更新时间:2023-11-03 23:52:39 24 4
gpt4 key购买 nike

我写了一个函数来压平一个 json。该函数以递归方式工作 - 如果键值对的值不是 json,则返回键值对,否则,将在值上再次调用该函数:

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)}

想法是每当函数 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)

输出:

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

此处运行示例:https://ideone.com/Z5aO9V

关于Python - 收集递归函数的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838700/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com