• python之路day05--字典的增删改查,嵌套


    字典dic

    数据类型划分:可变数据类型,不可变数据类型

    不可变数据类型:元组,bool,int str  -->可哈希
    可变数据类型:list,dict,set --> 不可哈希

    dict key(键) 必须是不可变数据类型,可哈希
    value(值):任意数据类型

    dict优点:二分查找去查询
    存储大量的关系型数据
    特点:无序,python3.6后版本好像是有序的了

    字典的增删改查dist 字典的键可以理解为列表中的索引

    dic = {'age':18,'name':'jin','sex':'male',}
    #
    dic['hight']=180 # 没有键值对会新增
    print(dic)#{'age': 18, 'name': 'jin', 'sex': 'male', 'hight': 180}
    dic['age']=16 #如果有键,则值会覆盖
    print(dic)#{'age': 16, 'name': 'jin', 'sex': 'male', 'hight': 180}
    
    
    dic.setdefault('weight') #有键值对,不做任何改变,没有则添加
    dic.setdefault('weight',150)
    dic.setdefault('name','erge')
    print(dic)#{'age': 16, 'name': 'jin', 'sex': 'male', 'hight': 180, 'weight': None}
    #
    # pop
    print(dic.pop('age'))#16   返回age对应的值
    print(dic.pop('二哥',None)) #None  为了防止删除的时候没有要删除的键,而报错设置一个返回值,也可以是字符串'没有此键'
    print(dic.pop('name',None)) #jin 删除有的键,即使设置了返回值None也不会返回,而是返回删除成功的值 jin
    print(dic) #{'name': 'jin', 'sex': 'male', 'hight': 180, 'weight': None}
    
    # popitem
    print(dic.popitem()) #随机删除一个元素,并把删除元素的键和值放在一个元组里返回:(key, value)。
    #返回值 ('weight', None)
    print(dic) #{'sex': 'male', 'hight': 180}
    #del
    del dic['sex'] #del +键,按键来删除
    print(dic) #{'hight': 180}
    
    del dic #删除字典
    print(dic)
    
    #clear 清空字典
    dic.clear(dic)
    print(dic)
    #
    # 1)
    dic['age']=16 #如果有键,则值会覆盖
    
    2)
    dic = {'name':'zy','age':18,'sex':'male'}
    dic2 = {'name':'alex','weight':'150'}
    dic2.update(dic) #一样的键,值会覆盖,不一样的键,会新增
    print(dic2) #{'name': 'zy', 'weight': '150', 'age': 18, 'sex': 'male'}
    查
    dic1 = {'name':'zy','age':18,'sex':'male',}
    print(dic1.keys()) #dict_keys(['name', 'age', 'sex'])
    print(dic1.values()) #dict_values(['zy', 18, 'male'])
    print(dic1.items()) #dict_items([('name', 'zy'), ('age', 18), ('sex', 'male')])
    
    
    print(dic1['name']) #返回值 zy
    print(dic1['name1']) #会报错,找不到这个键 KeyError: 'name1'
    
    #这时可以用dic1.get() 设置一个返回值  如下:
    print(dic1.get('name1','没有这个键')) #没有这个键
    
    用循环查询
    for i in dic1: #dic1与dicdic1.keys()一样,只打印出键
        print(i)  #name age sex
    
    for i in dic1.keys():  #name age sex
        print(i)
    
    for i in dic1.values():
        print(i) #zy 18 male
    
    for i in dic1.items():  #返回的是元组,元组里是键值对
        print(i) #('name', 'zy') ('age', 18) ('sex', 'male')
    ps:
    a,b =1,2
    print(a,b) #1 2

    for j,k in dic1.items(): #可以用两个变量来接收
    print(j,k)
    # name zy
    #age 18
    alex male

    #面试题:
    a=1
    b=2
    # 请用一行代码让a=2,b=1
    a,b=b,a
    print(a,b) #2 1

    字典的嵌套

    dic = {'name':['alex','wusir','taibai'],
    'py9':{
    'time':1213,
    'learn_money':'free',
    'addr':'CBD',
    },
    'age':11,
    }


    需求1 age改成56
    
    dic['age']=56
    print(dic)#{'name': ['alex', 'wusir', 'taibai'], 'py9': {'time': 1213, 'learn_money': 'free', 'addr': 'CBD'}, 'age': 56}
    
    #需求1 name加个zy
    dic['name']#找到的是列表
    dic['name'].append('zy')
    print(dic) #{'name': ['alex', 'wusir', 'taibai', 'zy'], 'py9': {'time': 1213, 'learn_money': 'free', 'addr': 'CBD'}, 'age': 56}
    
    taibai 变成大写
    dic['name'][2]=dic['name'][2].upper()  #字符串的方法upper赋值给新的元素接收
    print(dic) #{'name': ['alex', 'wusir', 'TAIBAI'], 'py9': {'time': 1213, 'learn_money': 'free', 'addr': 'CBD'}, 'age': 11}
    
    # 在py9里加一个键值对
    dic['py9']['sex']='womale'
    print(dic) #{'name': ['alex', 'wusir', 'TAIBAI'], 'py9': {'time': 1213, 'learn_money': 'free', 'addr': 'CBD', 'sex': 'womale'}, 'age': 11}
    ps:

    a = ' 123 23 21'
    print(a.split())
    l=a.split() #['123', '23', '21']
    print(len(l))


    #输出字符串中有数字的个数 12是一个整体
    info= input('>>') #sad12ass22aa22
    
    for i in info:
        if i.isalpha():
            info=info.replace(i,' ')
    
    l=info.split()
    print(len(l)) #3

    相关练习题

    # 1/如有下值li=[11,22,33,44,55,66,77,88,99,90],将所有大于66的值保存在字典的一个key中。if 将所有小于66的值保存在字典的2个key中:
    #     即:{'k1':大于66的所有值列表,'k2':小于66的所有值列表}
    
    li=[11,22,33,44,55,66,77,88,99,90]
    l1=[]
    l2=[]
    dic={}
    for i in li:
        if i == 66:
            continue
        if i >66:
            l1.append(i)
    
        else:
            l2.append(i)
    dic.setdefault('key1',l1)
    dic.setdefault('key2',l2)
    print(dic)
    # 2/输出商品列表,用户输入序号,显示用户选中的商品
    # 商品li=['手机','电脑','鼠标垫','游艇']
    # 要求:
    # 1.页面显示 序号+商品名称,如:
    # 1 手机
    # 2 电脑
    # ...
    # 2.用户输入选择的商品序号,然后打印商品名称
    # 3.如果用户输入的商品序号有误,则提示显示有误,并重新输入。
    # 4.用户输入Q或者q,退出程序。
    
    # input=input('<<<')
    # print(len(li))
    li=['手机','电脑','鼠标垫','游艇']
    
    for i in li:
        print('{}	{}'.format(li.index(i)+1,i))
    
    
    while 1:
        num = input('请输入选择的商品的序号/输出Q或q退出:')
        if num.isdigit():
            if int(num) <= len(li) and int(num) > 0:
                print(li[int(num)-1])
            else:
                print('输入有误,请重新输入')
        elif num.strip().upper() == 'Q':
                print('成功退出!')
                break
        else:
            print('请重新输入,只能输入号码')

     习题:

    删除key值中含有k元素的键
    dic={'k1':'v1','k2':'v2','a3':'v3'}
    dic1={}
    for i in dic.keys():
        # print(i) #k1 k2 a3
        if 'k' not in i:
            dic1.setdefault(i,dic[i])
    #        print(dic1)
    dic =dic1
    print(dic) #{'a3': 'v3'}
    
    第二种 将需要删除的键存在列表中,循环这个列表,删除字典中的键。(字典中遍历的时候不能做删除操作)
    dic={'k1':'v1','k2':'v2','a3':'v3'}
    li =[]
    for i in dic:
        if 'k' in i:
            li.append(i)
    for i in li:
        del dic[i]
    print(dic) #{'a3': 'v3'}
  • 相关阅读:
    快速排序算法C++实现[评注版]
    浮躁的程序员
    扬长避短使用Windbg和Visual Studio高效调试调试你的代码
    程序员,代码,理想,老男孩
    Windows Server 2008 R2 如何启动kernel dbg进行双机内核调试『续bcdedit 用法详解』
    Windows Server 2008 R2 如何启动kernel dbg进行双机内核调试『配置详解』
    忙着活或忙着死[转]
    SQL2005使用游标的实例(SBO中计算到期应收账款)
    C#编写的Windows计算器源代码
    请登录真正的BBS
  • 原文地址:https://www.cnblogs.com/hanfe1/p/10253805.html
Copyright © 2020-2023  润新知