gpt4 book ai didi

python - 如何在 Python 中产生递归函数

转载 作者:太空狗 更新时间:2023-10-30 00:37:43 26 4
gpt4 key购买 nike

所以我有一本字典:

{'a': {'b': {'c': 'd', 'e': 'f'}}}

我需要创建一个字典如下:

{'c':'d', 'e','f'}

它可以深入到任何级别,但我应该始终在最大深度处获取键值对。所以我写了一个函数:

def boil_down_array(key, data):
if type(data) == dict:
for key, item in data.items():
boil_down_array(key, item)
else:
yield {key:data}

现在的问题是,一旦进入递归,yield 就会丢失。我如何再次产生该字典?我得到的只是一个发电机,这不是我想要的。

最佳答案

使用yield from与你的递归调用,否则你只是忽略了递归调用的结果:

def boil_down_array(key, data):
if type(data) == dict:
for key, item in data.items():
yield from boil_down_array(key, item)
else:
yield {key: data}

这仅在 Python > 3.3 中可用,但本质上只是简单地从额外循环中产生的简写:

for key, item in data.items():
for x in boil_down_array(key, item): # just exhaust the recursive generator
yield x # and "re-yield" what it produces

为了实现您想要的数据结构,您最好生成对而不是 dict,这样您就可以更轻松地将结果转换为生成的 dict:

yield key, data

然后你可以像这样使用它:

result = dict(boil_down_array(None, input_dict))

一个更简单的递归方法将只返回一个完整的dict:

def boil_down_nested(dct):
result = {}
for k, v in dct.items():
if isinstance(v, dict):
result.update(boil_down_nested(v))
else:
result[k] = v
return result

关于python - 如何在 Python 中产生递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52725568/

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