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
相关产品推荐
相关产品推荐

