Python实现树形字典的控制台分步遍历及回退功能需求
树形字典控制台遍历与回退实现方案
问题背景
现有如下树形字典结构:
[{ "id": "id01", "system": { "0": "initial question \n Choice A \n Choice B", "1": {"0": "Answer Choice A\n Second Choice C \n Second Choice D", "1":"Final Answer Choice AC", "2":"Final Answer Choice AD"}, "2": {"0": "Answer Choice B\n Second Choice A \n Second Choice B", "1": "Final Answer Choice BA", "2":"Final Answer Choice BB"} } }]
需要实现:
- 控制台输入逐步遍历树形结构,选对应选项进入下一层,直到终点
- 支持按
R键逐步回退到上一层选择
当前代码无法满足需求,以下是可行实现方案:
实现代码
# 定义树形数据 data = [{ "id": "id01", "system": { "0": "initial question \n Choice A \n Choice B", "1": {"0": "Answer Choice A\n Second Choice C \n Second Choice D", "1":"Final Answer Choice AC", "2":"Final Answer Choice AD"}, "2": {"0": "Answer Choice B\n Second Choice A \n Second Choice B", "1": "Final Answer Choice BA", "2":"Final Answer Choice BB"} } }] # 初始化当前节点和路径栈 current_node = data[0]["system"] path_stack = [current_node] # 打印初始问题 print(current_node["0"]) while True: user_input = input("Select an option (输入数字选择,输入R回退): ").strip().upper() # 处理回退逻辑 if user_input == "R": if len(path_stack) > 1: path_stack.pop() current_node = path_stack[-1] print(current_node["0"]) else: print("已经在最顶层,无法回退") continue # 处理选择逻辑 if user_input in current_node: selected_value = current_node[user_input] # 判断是否进入下一层 if isinstance(selected_value, dict): path_stack.append(selected_value) current_node = selected_value print(current_node["0"]) else: # 到达终点,打印结果后回到初始层 print(selected_value) print("路径结束,回到初始问题") current_node = data[0]["system"] path_stack = [current_node] print(current_node["0"]) else: print("无效输入,请输入正确的选项数字或R")
核心逻辑说明
- 路径栈管理:用
path_stack记录每一层的节点,进入子节点时压栈,回退时出栈,确保能精准回到上一层状态 - 节点类型判断:通过
isinstance判断选中值是否为字典,区分是进入下一层还是到达终点 - 输入处理:统一转大写处理
R输入,避免大小写错误,同时验证输入是否在当前节点的有效键范围内
内容的提问来源于stack exchange,提问作者Sphenoidale
相关产品推荐
相关产品推荐

