You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用yield实现字典扁平化时递归调用未生效问题求助

问题根因
  • 你定义的und1是生成器函数,调用该函数只会返回生成器对象,不会自动执行内部逻辑、也不会自动把递归生成的元素传递到上层生成器。现有代码中碰到嵌套字典时仅执行了und1(d[i])创建生成器对象,没有消费该生成器的任何元素,因此嵌套字典的内容不会被外层迭代器获取到。
解决方案

方案1:使用yield from(Python 3.3及以上版本支持)

直接通过yield from语法将递归生成器的所有元素透传到上层,代码修改如下:

def und1(d):
    for i in d:
        if type(d[i])==dict:
             yield from und1(d[i])
        else:
            yield({i:d[i]})
Dict1 = {1: 'Geeks', 2: 'For', 3: 'Geeks',4:{5:'wevcn '}}
for z in  und1(Dict1):
    print(z)

方案2:手动遍历递归生成器(全Python版本兼容)

手动迭代递归调用返回的生成器,逐个yield每个元素,代码修改如下:

def und1(d):
    for i in d:
        if type(d[i])==dict:
             for item in und1(d[i]):
                 yield item
        else:
            yield({i:d[i]})
Dict1 = {1: 'Geeks', 2: 'For', 3: 'Geeks',4:{5:'wevcn '}}
for z in  und1(Dict1):
    print(z)

两种方案运行后均可得到你预期的输出。

内容的提问来源于stack exchange,提问作者asd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:24:00