根据序号一级一级的查询,也可增加字典
dic = { '植物': {'草本植物': ['牵牛花','瓜叶','葫芦','翠菊','冬小麦','甜菜'], '木本植物': ['乔木','葱木','木本1','木本2','木本3','木本4'], '水生植物': ['水生1','水生2','水生3','水生4','水生5','水生6'], }, '动物': {'两栖动物': ['两栖1', '两栖2', '两栖3', '两栖4', '两栖5', '两栖6'], '禽类动物': ['鸡', '鸭', '鹅', '猪', '狗', '猫'], '哺乳动物': ['老虎', '狮子', '大象', '熊瞎子', '傻狍子', '兔崽子'], } } #定义存放第一级key的列表 li = [] #用于退去循环的条件,当输入q的时候将go设置为false,退出整个循环 go = True while go: for i,v in enumerate(dic,1):#enumerate用于给数值前面添加序号,可以指定从几开始 print(i,v)#输出字典一级的key值 li.append(v)#将key值存放在列表中,便于一会用索引取列表中的值 u_c = input('>>>')#根据输入的序号查询下一级字典的值 if u_c.isdigit():#判断如果输入数字是查询,输入字母添加 if u_c =='q':#如果输入的为q退出循环 go = False break u_c = int(u_c)#输入的都为字符串,转换为整型,便于用作索引的下标 li1 = []#将第二级的key存放在li1的列表中 while go: for i,v in enumerate(dic[li[u_c-1]],1):#根据输入的数字判断要查询的是植物还是动物,下标从0开始索引-1,遍历下一级的key print(i,v) li1.append(v)#将第二级的key存放在li1列表中 u_c1 = (input('>>>>'))#输入序号便于查看第三级的数据 u_c1 = u_c1.lower() if u_c1 == 'b':#输入b为返回上一级 li.clear()#将li中的列表的数据情况 break elif u_c1 == 'q': go = False break u_c1 = int(u_c1) while go: for v in dic[li[u_c-1]][li1[u_c1-1]]:#根据索引下标将第三级的值取出来 print(v) u_c2 = str(input('>>>')) u_c2 = u_c2.lower() if u_c2 == 'b': li1.clear() break elif u_c2 =='q': go = False break elif u_c.isalpha():#判断输入的是否是字母 u_c = u_c.lower()#将字母转换为小写 if u_c =='i': lx = input('类型:') if dic.get(lx,1) == 1:#get是查找字典中是否有输入的类型,如果没找到可以返回一个值,就可以增加一个 dic[lx] = {} zl = input('种类:') if dic[lx].get(zl, 1) == 1:#判断这个类型找那个的是否找到种类 dic[lx][zl]= []#如果没找到就添加一个种类的key ,values为[] while True: mc = input('名称:') if mc =='q': li.clear() break if mc in dic[lx][zl]: print('已经存在!') else: dic[lx][zl].append(mc)#将列表中追加一个值 print(dic)
结果:
1 植物 2 动物 >>>1 1 草本植物 2 木本植物 3 水生植物 >>>>1 牵牛花 瓜叶 葫芦 翠菊 冬小麦 甜菜 >>>b 1 草本植物 2 木本植物 3 水生植物 >>>>b 1 植物 2 动物 >>>i 类型:人类 种类:黄种人 名称:张明星 名称:小刘 名称:小李 名称:b 名称:q 1 植物 2 动物 3 人类 >>>3 1 黄种人 >>>>1 张明星 小刘 小李 b >>>
添加key值
db = { '上海':{ '浦东':{} }, '北京':{ '昌平':{ '沙河':{}, '回龙观':{}, }, '朝阳': {}, '海淀': {}, } } path = []#定义一个临时存放key的路径 while True: temp = db #将db赋值给temp,用于临时存放 for item in path:#第一次循环path为空不执行for循环 temp = temp[item] #根据path中的值,遍历后重新赋给temp print('当前可选的所有子节点:',list(temp.keys()))#将temp中的key打印出来 choice = input('1:添加节点,2:查看节点(Q/B);\n>>>') if choice == '1': name = input('请输入要添加的节点名称:') temp[name] = {}#将输入的值房在temp中 elif choice == '2': name = input('请输入要查看的节点名称:') path.append(name) elif choice.lower() == 'b': if path: path.pop() elif choice.lower() == 'q': break else: print('输入不合法')