效果图:

实现代码:

dic = {
'人物':{
'帽子':{'前年玄铁帽'},
'武器':{'屠龙宝刀'}
},
'属性':{
'力量':{35},
'敏捷':{66}
},
'任务':{
'主线任务':{'拯救世界'},
'支线任务':{'扶老奶奶过马路'}
}
}
current_leve = dic
parent_leve = dic
all_leve = []
where = 0
while True:
for key1 in current_leve:
print(key1)
choice = input("You choice:")
print('返回上一级:返回', '\t', '退出程序:退出')
if(choice == '返回'):
where = 1
elif(choice == '退出'):
where = 2
else:
all_leve.append(parent_leve)
all_leve.append(current_leve[choice])
parent_leve = current_leve[choice]
current_leve = all_leve.pop() if(where == 1 ):
current_leve = all_leve.pop()
where = 0
if(where == 2):break 解析:
这是一个多层字典的字典嵌套,重点在于弄明白它的层级关系(我一遍遍的调错调了一个小时,总算是达到预期效果了,虽然逻辑上还是有点问题,需要改进)。
在本例中,字典分为三层,第一次打印最外层字典的键,选择相应键后再次打印下一层字典键,选择后输出对应键内容。
本身逻辑也不是特别复杂,重点在于如何保存“键”,这个代码是我看教学视频借用的,巧妙之处在于他用列表存储字典的键,且通过字典变量来在不同层级的键之间进行转换(赋值),举个例子:dic = {a:{b:{c:{}}},很明显这是一个字典嵌套,如果我想取到字典键b所存储的值,必须print(dic[a][b]),这样看没什么问题,很简单,但当我想要取c呢?答案是
print(dic[a][b][c]),如果我想遍历的话就要分析“[]”的个数以及层数关系,但如果我用字典变量x{}来代替每一层的变化,比如说x = dic[a],那么x[b]就等于dic[a][b],同理,当我每进入下一层字典时,都让x = x[“下一层键值”],如x = x[b],则现在x 就等于 dic[a][b],c对应的值也就能通过x[c]取到了,这样大大减少了每一层字典的循环次数(重复代码)
另一个要注意的点:返回,即保存上一层甚至是多层的值,保存一层还好说,随便再加个字典变量就可以存下替换前的字典,但如何存储多层呢?在这里我用的是列表,先把最外层存进去,然后每进入下一层,用一个值保存本层并添加到列表中,本层变量后移,当返回上一层时,每返回一次列表弹出一个字典(其实是字典的状态,即字典的键值),我的代码中是用的增加,弹出来完成本层字典移动到下一层,与直接变量赋值没太大区别。
其实这些都还好,我最困惑的还是怎么样能自动快速的导入字典,这个是个挺麻烦的问题,我本来想弄个中国各省市名称的那种的,名字是从网上直接下的,结果往字典下入的时候出问题了,折腾了好长时间,最后完成的是能导入字典的第一层,但再进入第二层的时候就老是报错,回头我得再研究研究,总之自动导入字典肯定是可以实现的。

最新文章

  1. appium 等待方法 转
  2. 一个实现了View接口的Fragment
  3. jQuery选择器。 5.21 《深夜还在编码的你》
  4. 利用IdentityServer3在ASP.NET 5和Angular中实现OAuth2 Implicit Flow
  5. noip2010-t2
  6. 【bzoj3246】 Ioi2013—Dreaming
  7. 在MS CRM 4.0中引用JS文件
  8. FZU 2082 过路费 (树链剖分 修改单边权)
  9. android 登陆案例_最终版本 sharedpreference
  10. [转贴]JAVA :CXF 简介
  11. Pi
  12. 共轭梯度算法求最小值-scipy
  13. python进行md5加密
  14. iOS设备中垂直同步开启后的帧率计数
  15. Why ngx-uploader doesn't like to cooperate with .net core 2.x?
  16. C#基本方法(瞎写写)
  17. laravel框架5.2版本组件包开发
  18. ALGO-27_蓝桥杯_算法训练_FBI树(树,递归)
  19. zoj 1760 Doubles(set集合容器的应用)
  20. SqlSession对象之ResultSetHandler

热门文章

  1. tomcat JAVA_OPTS设置
  2. LightOJ-1214-Large Division-大数取余
  3. Jan&Feb 工作总结
  4. node环境下安装vue-cli
  5. selenium基础(鼠标和键盘事件)
  6. python Selenium chromedriver 自动化超时报错:你需要使用多标签保护罩护体
  7. html--垂直居中
  8. Mysql 数据库crash恢复
  9. 关于Mysql几周的整理文档
  10. 用shell编写小九九乘法表程序