Python无依赖实现可交互多级字典的动态添加功能
实现动态多级字典的交互程序
下面是完全符合需求的Python实现方案:用栈结构跟踪当前所在的字典层级,通过交互式循环支持添加字符串、子字典、进入子层级、返回上级等操作,全程不依赖任何外部库,逻辑清晰适合新手理解。
完整代码
def main(): # 初始化根结构,从cities节点开始 root = {"cities": {}} # 用栈跟踪层级路径,每个元素是(父字典, 当前键) level_stack = [(root, "cities")] while True: # 获取当前操作的字典 current_dict = level_stack[-1][0][level_stack[-1][1]] print("\n=== 当前层级内容 ===") # 打印当前层级的键和类型(区分字符串和子字典) for key, value in current_dict.items(): value_type = "子字典" if isinstance(value, dict) else "字符串" display_value = value if isinstance(value, str) else "" print(f"- {key}: [{value_type}] {display_value}") # 显示操作选项 print("\n操作选项:") print("1. 添加字符串值条目") print("2. 添加新子字典") print("3. 进入已有子字典") print("4. 返回上一级") print("5. 退出程序") choice = input("请输入选项编号:").strip() if choice == "1": # 添加字符串值 key = input("请输入条目键名:").strip() if key in current_dict: print("该键已存在,请换一个键名!") continue value = input("请输入字符串值:").strip() current_dict[key] = value print(f"已添加条目:{key} = {value}") elif choice == "2": # 添加新子字典 key = input("请输入子字典键名:").strip() if key in current_dict: print("该键已存在,请换一个键名!") continue current_dict[key] = {} print(f"已添加子字典:{key}") elif choice == "3": # 进入已有子字典 key = input("请输入要进入的子字典键名:").strip() if key not in current_dict: print("该键不存在!") continue if not isinstance(current_dict[key], dict): print("该条目不是子字典,无法进入!") continue # 将当前层级压入栈,切换到子字典 level_stack.append((current_dict, key)) print(f"已进入子字典:{key}") elif choice == "4": # 返回上一级 if len(level_stack) <= 1: print("已经在最顶层(cities节点),无法返回!") continue level_stack.pop() print("已返回上一级") elif choice == "5": # 退出并打印最终结构 print("\n=== 最终字典结构 ===") print(root) break else: print("无效选项,请重新输入!") if __name__ == "__main__": main()
关键逻辑说明
- 层级跟踪:用
level_stack栈保存路径,每个元素是(父字典, 当前键),取栈顶就能快速定位当前操作的字典,实现无限嵌套的层级切换。 - 交互校验:对重复键、非字典条目进入等情况做了边界处理,避免程序出错,同时给用户明确提示。
- 类型区分:用
isinstance()判断值的类型,确保操作符合逻辑(比如只能进入子字典层级)。
操作示例
- 启动程序后,默认在
cities层级,选择2添加子字典Beijing - 选择
3进入Beijing层级 - 选择
1添加条目famous_university,值设为Peking University - 选择
2添加子字典high_schools - 选择
3进入high_schools,再选1添加NO.4 Middle School,值设为Top school in Beijing - 多次选
4返回顶层,最后选5退出,就能看到完整的多级字典结构。
内容的提问来源于stack exchange,提问作者FractalsAndFractures
相关产品推荐
相关产品推荐

