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

Python3.8 递归将值为列表的字典转为Item类实例及覆盖问题解决

问题原因

你当前的代码每次循环都会将新创建的Item实例赋值给同一个变量AnotherInstance,旧的实例没有被存储,自然只能保留最后一次的结果。同时你要求使用递归实现,原代码是迭代写法,以下是符合要求的调整方案:

递归实现代码

# 存储所有Item实例的空列表
item_list = []

def create_items_recursive(items_iter):
    # 递归终止条件:字典键值对遍历完毕
    try:
        key, value = next(items_iter)
    except StopIteration:
        return
    # 创建当前Item实例并存入列表
    current_item = Item(key, value[0], value[1], value[2], value[3], value[4])
    item_list.append(current_item)
    # 递归处理下一个键值对
    create_items_recursive(items_iter)

# 传入字典items的迭代器启动递归
create_items_recursive(iter(MainDictionary.items()))

代码说明

  • 提前声明空列表item_list,所有创建的Item实例都会被追加到该列表中,不会出现覆盖丢失的问题
  • 递归函数每次仅处理一个键值对,处理完成后调用自身处理下一个,直到所有键值对遍历完毕自动终止
  • 执行完成后直接读取item_list即可获取所有符合要求的Item实例,供后续逻辑调用

可选非递归简化写法

如果你不强制要求递归,普通迭代的写法更简洁,也不会存在递归深度过大导致的栈溢出风险:

item_list = [Item(k, *v) for k, v in MainDictionary.items()]

这里使用*v解包字典的值列表,自动按顺序传递给Item的构造参数,无需手动写下标取值,更简洁也不易出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 05:27:03