python自学第七课!(字典练习)

时间:2022-09-28 20:04:15

根据序号一级一级的查询,也可增加字典

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('输入不合法')