• python学习笔记(三)- 字典、集合


    字典key-value形式

      1)取数据方便   #字典里面没有重复的key

      2)查询速度快

    #字典是无序的

    一、定义一个字典

    infos = {
        'name':'王小明',
        'sex':'male',
        'addr':'北京',
        'age':'20'    #最后没逗号
    }
    print(infos.get('name'))      #>>> 王小明

     

    二、字典的方法:

      1)查:

      字典的取值:有两种方法

    print(infos.get('name'))  #如果key不存在,返回None
    
      print(infos.get('name',404)) #如果key不存在,返回定义的404
    print(infos['sex'])    #如果key不存在会报错

     

      2)增:三种增加的方式

    ①infos['phone']=15866661111   #增加一个key-v
    ②infos.setdefault('money','100w') #增加一个k-v
      print(infos)

    这两方式的区别:key存在时,都能增加,但是

    infos['phone']=15866661112     #如果key存在时,会修改原来的value
    infos.setdefault('name','张晓') #如果key存在时,不会修改原来的值
    print(infos)

    将一个变量加入字典:

    users.setdefault(username,pwd)  #方式一
    users[username]=pwd  #方式二

    合并两个字典:a.update(b)  

    a = {'a':'1'}
    b = {'b':'2'}
    a.update(b)   #如果b字典的key与a中的key相同b会更新a的value
    print(a)
    
    >>> {'a': '1', 'b': '2'}

     

      2)修改:一种方式

    infos['name']= '小胖'

     

      3)删:

    infos.pop('age')  #指定key来删除
    infos.popitem()   #随机删除一个key(用处不大)
    del infos['phone']  #指定key来删除
    infos.clear()    #清空字典
    print(infos)

     

    三、字典里常用的三个内置方法

    print(d.values())  #获取字典所有的value
    print(d.keys())    #获取字典所有的key
    print(d.items())   #获取字典所有的k-v

     

    四、【字典举例】

    people = {
        '田雨':{
            'age':18,
            'money':200000,
            'clothes':'100套',
            'hzp':'n多',
            'shoes':['nike','addis','lv','chanle']
        },
        '张三':{
            '金库':'2000w',
            'house':['三环一套','4环2套'],
            'cars':    {
                    'japan':['普拉多','兰德酷路泽'],
                    'usa':['林肯','凯迪拉克','福特'],
                    'china':['五菱宏光','qq','红旗']
                }
        }
    }
    people['张三']['cars']['usa'].append('牧马人')
    
    # people['田雨']['shoes'].append('匡威')    #
    # print(people)
    # people['田雨']['money'] = people['田雨']['money']+200
    # people['田雨']['money'] += 200
    # print(people)

     

    五、字典的循环:

       1)直接循环字典的话,只取到字典的key

    for p in people:
        print(p)

      >>>张三

           田雨


      2)循环的时候,同时取字典的key和value

    for k,v in people.items():
    print(k,'--->',v)

     输出:

    田雨 ---> {'age': 18, 'clothes': '100套', 'hzp': 'n多', 'shoes': ['nike', 'addis', 'lv', 'chanle'], 'money': 200000}
    张三 ---> {'cars': {'china': ['五菱宏光', 'qq', '红旗'], 'japan': ['普拉多', '兰德酷路泽'], 'usa': ['林肯', '凯迪拉克', '福特', '牧马人']}, '金库': '2000w', 'house': ['三环一套', '4环2套']}

     

      3)字典里面用in来判断某个值是否存在话,只是判断key是否存在

    if 'key1' in users: #存在返回True,不存在返回False
        print('xxx')

     

    六、【字典练习二】:注册-字典

    #注册:验证用户名是否已存在,将新注册的用户名和密码加入到字典
    users = {
        'zhangsan':'123456',
        'wangwu':'456789',
    }
    for i in range(3):      #限制错误3次
        username = input('账号:').strip()
        passwd = input('密码:').strip()
        cpasswd = input('密码确定:').strip()
        if username=='' or passwd=='' or cpasswd=='':  
            print('用户名/密码不能为空')
        elif username in users:
            print('用户名已经被注册!')
        elif passwd!=cpasswd:
            print('两次输入的密码不一致')
        else:
            print('恭喜,注册成功!')
            # users.setdefault(username,passwd)
            users[username]=passwd   #注册成功,将key和value加入users的字典
            break   #
    else:
        print('错误次数过多')
    print(users)

     

    七、【字典练习三】:

    #写一个录入学生作业情况的一个程序:
        #1、查看学生作业情况 ,输入用户名   #choice=1
            #存在的话,print
            #不存在的话
        #2、录入学生作业情况(姓名、日期、已交/未交)   #choice=2
        #3、录入的情况允许输入3次,需要验证为空的情况
        #判断choice不存在的情况
    
    homeworks = {
        '张流量':{'2018.3.22':"未交",'2018.3.23':'wei交'},
        '田雨':{'2018.3.22':"未交",'2018.3.23':'wei交'},
    }
    
    choice = input("请输入您的选择 1:查看学生作业情况 2:录入学生作业情况:")
    if choice == '1':
        for x in range(3):
            name = input("请输入您要查看的学生的姓名:").strip()
            if name in homeworks:
                print("%s:%s" %(name,homeworks[name]))
                break
            elif name=='':
                print("姓名不能为空")
            else:
                print("没有找到此学生信息")
        else:
            print("查询次数过多,请稍后再试")
    elif choice == '2':
        for i in range(3):
            username = input("请输入需要录入的学生的姓名:").strip()
            date = input("请输入需要录入的日期:").strip()
            status = input("请输入'已交'或'未交':").strip()
            if username=='' or date=='' or status=='':
                print("录入的信息不完整")
            elif username in homeworks:
                homeworks[username][date] = status  #姓名+ 时间相同时,不报错,可更新原来已录入的状态,效果和update一样
                #homeworks[username].setdefault(date,status) #姓名+ 时间相同时,不报错,但是状态不能更新
                #homeworks[username].update({date:status})
                print("您录入后此学生的信息更新为,%s:%s" % (username, homeworks[username]))
                break
            else:
                homeworks[username] = {date:status} #k-v的形式
                print("您录入学生的信息为,%s:%s" % (username,homeworks[username]))
                break
        else:
            print("输入错误次数过多")
    else:
        print("输入错误,请输入1或2")
    
    print("已录入的全部信息:%s" % homeworks)       

    集合:

    一、集合的定义

    定义空集合:s = set()
    
    定义集合:s = {1,3,5,7}  #注意与字典区分
    
    d = {'k':'v'}  #字典

    集合天生就能去重(集合中没有重复的元素),集合也是无序的

    s = set('222333555777')  #字符串/list可以强制转换为集合
    print(s)
    
    >>> {'5', '7', '2', '3'}  #去除了重复的元素

    二、集合的交集、并集、差集

      1)取交集:取两个集合都有的元素

    s2 = set('112322244556')
    s3 = {'1', '1', '2', '5', '6'}
    print(s2 & s3)   #取交集的第一种方式
    print(s3.intersection(s2))   #取交集第二种方式
    
    >>> {'5', '1', '2', '6'}
    {'5', '1', '2', '6'}

    2)取并集:两个集合合并到一起,并去重

    print(s2 | s3)     #方式一
    print(s2.union(s3))   #方式二

    3)取差集:去掉set3

    print(s2-s3)
    print(s2.difference(s3)

    4)对称差集:保留两集合都没有的,去掉都有的

    print(s2 ^ s3)
    print(s4.symmetric_difference(s5))

     

    三、集合的方法:

    增、删、改、判断交集

    s.add('ss')    #加元素
    s.pop()        #随机删除
    s.remove('ss')   #删除某个元素
    s.update({1,2,3}) #把另一个集合加进去
    
    s.isdisjoin(s1)   #两个集合没有交集返回True,有交集返回False
                                                         
    张三
  • 相关阅读:
    django基础知识之模型查询:
    django基础知识之定义模型:
    django基础知识之ORM简介:
    django基础知识之认识MVT MVC:
    解决ImportError: libmysqlclient_r.so.16: cannot open shared object file-乾颐堂
    python 多继承详解-乾颐堂
    一步步来用C语言来写python扩展-乾颐堂
    nltk 之 snowball 提取词干-乾颐堂
    Python 执行js的2种解决方案-乾颐堂
    常用的 Python 调试工具,Python开发必读-乾颐堂
  • 原文地址:https://www.cnblogs.com/chenhongl/p/8808843.html
Copyright © 2020-2023  润新知