05、day05_字典增删改查

字典的初识

  • WHY

    • 列表可以存储大量的数据,但数据之间的关联性不强
    • 列表的查询速度比较慢
  • WHAT 容器型数据类型:dict

  • HOW

    • 数据类型的分类(可变与不可变):

      • 可变(不可哈希)的数据类型:列表(list)、字典(dict)、集合(set)

      • 不可变(可哈希)的数据类型:str、 bool、 int、 tuple(元组)

        什么叫不可变:一旦定义了以上四种类型的变量,就会在内存中占用一段空间储存这个变量的值

        不管是否重新赋值了变量,原来的内存中的空间始终占用,也就是重新赋值只是重新开了一块新的内存空间:

        变量 操作 内存地址
        str 赋值 地址1:"Murphy"
        再次给str赋值 地址2:"Mike"

        如上表,重新赋值后,内存中依然存在"Murphy"它并不会消失,变化的只是变量str的指向

    • 字典: {}括起来,以键值对形式存储的容器型数据类型:

      • dic = {
            'Murphy':
                 {'name': '老杨', 'age': 18, 'sex': '男'},
            'Python学习':
                 ['Murpht', '老杨', 'Mikie', '嘻嘻']
        }
        
      • 键,必须是不可变的数据类型:str,int,,,(bool, tuple,几乎没人用布尔值和元组当键)且是唯一的

      • # 验证字典的合法性:
        dic = {[1,2,3]:'murphy', 1 : 666}  # 错误,不能用可变数据类型当‘键’(list)
        print(dic)
        dic = {1: 'M', 1: 'C', 2: 123}  # 如果存在两个相同的键,那么后一个会覆盖前一个 所以键要唯一
        print(dic)  # {1: 'C', 2: 123}
        
      • 值,可以是任意数据类型,对象

      • 字典在3.5版本之前(包括3.5)是无序的。

      • 字典在3.6X版本会按照初次建立字典的顺序排列,学术上不认为是有序的

      • 字典在3.7版本以后都是有序的

      • 字典的优点:查询速度非常快,存储有关联性的数据

      • 字典的缺点:以空间换时间。

    • 字典的创建方式:

      • # 方式一:
        dic = dict((('one', 1), ('two', 2), ('three', 3)))
        print(dic)  # {'one': 1, 'two': 2, 'three': 3}
        
        # 方式二:
        dic = dict(one=1, two=2, three=3)
        print(dic)  # {'one': 1, 'two': 2, 'three': 3}
        
        # 方式三(官方写法):
        dic = dict({'one': 1, 'two': 2, 'three': 3})
        print(dic)  # {'one': 1, 'two': 2, 'three': 3}
        
    • 字典的增删改查

      • **增:1 直接增加(有则改之,无则增加);2 setdefault (有则不变,无则增加) **

        dic = {'name': '老杨', 'age': 18}
        # 键值对:
        # 比如酒店:键:就像房间号一样
        #           值:房间:里面放什么数据都行
        # 字典的增删改查:
        # 增:
        # 直接增加(有则改之,无则增加)
        dic['sex'] = '男'
        print(dic)
        dic['age'] = 23  # 相当于改
        print(dic)
        # setdefault 用这个方法只能新增,不能修改已有键值对(有则不变,无则增加)
        # dic.setdefault('hobby')
        # print(dic)  # {'name': '老杨', 'age': 23, 'sex': '男', 'Murphy': None}
        dic.setdefault('hobby', 'python')
        print(dic)  # {'name': '老杨', 'age': 23, 'sex': '男', 'Murphy': 'python'}
        
      • 删:pop() clear() del

        # pop 按照键去删除键值对,有返回值
        # dic.pop('age')
        ret = dic.pop('age')
        print(ret)  # 18
        print(dic)  # {'name': '老杨'}
        
        # pop第二个用法,当给pop()设置第二个参数时,不论是否有这个键,都不会报错,并且把第二个值返回
        ret = dic.pop('hobby', '没有这个键')
        print(ret)  # 没有这个键
        print(dic)  # {'name': '老杨', 'age': 18}
        
        # clear只是清空字典内容,不是删除字典
        dic.clear()
        print(dic)  #{}
        
        # del  会报错不推荐使用
        del dic['age']  # 正确写法
        del dic['hobby']  # 错误写法,没有hobby这个键,会报错不推荐使用
        print(dic)
        
      • 改,直接改 update

      • 查 按照键来查(不推荐,如果键不存在会报错), get()(推荐,如果键不存在会返回None)

        dic = {'name': '老杨', 'age': 18, 'hobby_list': ['python', '姑娘', '摇滚']}
        print(dic['hobby_list'])
        print(dic['hobby_list1'])  # 报错啦,不存在'hobby_list1'这个键
        
        #get
        l1 = dic.get('hobby_list')
        l1 = dic.get('hobby_list1')  # None
        print(l1)
        

猜你喜欢

转载自www.cnblogs.com/mikie/p/12590381.html