欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-04-10 12:15:54
根据序号一级一级的查询,也可增加字典 添加key值 ......

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

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