字典总结9.27

字典

  1. 字典的含义

    字典是系统类型,属于容器型数据类型(序列);

    将{}作为容器的标志,里面多个键值对(元素)用逗号隔开: {键1:值1, 键2:值2, 键3:值3, …}

    字典是可变(支持增删改);

    字典是无序(不支持下标操作;顺序不影响结果)

    键 -: 键必须是不可变类型的数据(数字、字符串、布尔、空值、元组);

    键唯一(同一个字典中同一个键只能出现一次)

    值 - 没有要求(任何类型的数据)

    # 字典无序
    print({'a': 10, 'b': 20} == {'b': 20, 'a': 10})     # True  顺序不影响 所以是相等的
    
    # 键不可变
    dict1 = {10: 20, 'a': 30, (10, 20): 40}
    # dict2 = {10: 20, 'a': 30, [10, 20]: 40}       # 报错   因为列表是可变的
    
    # 键唯一
    dict3 = {'a': 10, 'b': 20, 'a': 30}
    print(dict3)        # {'a': 30, 'b': 20}     取最后一个键对应的值
    
    # 空字典
    dict4 = {}
    
  2. 字典的查操作

    2.1: 查单个 - 获取单个值

    1)字典[键] - 获取字典中指定键对应的值,如果键不存在程序会报错

    2)字典.get(键) - 获取字典中指定键对应的值,如果键不存在不会报错并且会返回None

    3)字典.get(键, 默认值) - 获取字典中指定键对应的值,如果键不存在不会报错并且会返回默认值

    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    
    print(dog['type'])
    print(dog['name'])
    # print(dog['weight'])        # KeyError: 'weight' 没有对应的键会报错
    
    print(dog.get('price'))
    print(dog.get('color'))
    print(dog.get('weight'))        # None      加上get,如果没得没有对应的键 不会报错 会返回空值
    
    print(dog.get('age', 0))
    print(dog.get('color', '白色'))
    print(dog.get('weight', 5))    # 5  字典.get('键',默认值) 后面加默认值 ,如果元字典中有对应                                     的键,不会影响,如果没有,就会生成对应的键,值为默认值
    
    生活中的字典练习:
    class1 = {
        'className': 'Python2205',
        'classRoom': '11教',
        'lecturer': {'name': '余婷', 'age': 18, 'tel': '13678192302', 'gender': '女'},
        'classTeacher': {'name': '燕子姐', 'age': 18, 'tel': '119', 'QQ': '8282821'},
        'students': [
            {'name': 'stu1', 'age': 19, 'tel': '1922333', 'gender': '男', 'linkman':        {'name': '张三', 'tel': '11923'}},
            {'name': 'stu2', 'age': 28, 'tel': '8727832', 'gender': '男', 'linkman': {'name': '小明', 'tel': '19202'}},
            {'name': 'stu3', 'age': 30, 'tel': '291912', 'gender': '女', 'linkman': {'name': '李四', 'tel': '1910283'}},
            {'name': 'stu4', 'age': 17, 'tel': '2349183', 'gender': '男', 'linkman': {'name': '老王', 'tel': '109221567'}},
            {'name': 'stu5', 'age': 16, 'tel': '27273482', 'gender': '女', 'linkman': {'name': '王五', 'tel': '119283427'}},
            {'name': 'stu6', 'age': 22, 'tel': '1242402', 'gender': '男', 'linkman': {'name': '赵六', 'tel': '2091834'}}
        ]
    }
    # 1)获取班级名称
    print(class1['className'])
    
    # 2)获取讲师的名字和电话
    teacher = class1['lecturer']
    print(teacher['name'], teacher['tel'])
    
    # 3)获取班主任的名字和QQ
    print(class1['classTeacher']['name'], class1['classTeacher']['QQ'])
    
    # 4)打印所有学生的名字
    方法1:
    result = [x['name'] for x in class1['students']]
    print(result)
    
    方法2for stu in class1['students']:
        print(stu['name'])
        
    # 5)计算所有男生的平均年龄
    total_age = count = 0
    for stu in class1['students']:
        if stu['gender'] == '男':
            total_age += stu['age']
            count += 1
    print('男生的平均年龄:', total_age / count)
    
    
    # 6)打印所有女学生的联系人的电话
    for stu in class1['students']:
        if stu['gender'] == '女':
            print(stu['linkman']['tel'])
    

    遍历字典

    就是遍历字典 - 一个一个的获取字典所有的值

    方法1:
    for 变量 in 字典:
    循环体(变量获取到的是字典的键)

    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    for x in dog:
        print(x, dog[x])
    

    方法2:
    for 变量1,变量2 in 字典.items():
    循环体(变量1依次取到的是所有的键,变量2依次取到的是所有的值)

    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    for x, y in dog.items():
        print(x, y)
    
    
  3. 字典的增、改、删

    两种情况

    1)字典[键] = 值 - 如果键不存在就添加键值对;如果键存在就修改指定键对应的值

    例如:

    stu = {'name': '小明', 'age': 18, 'height': 177}
    
    stu['weight'] = 70    在字典stu添加  stu中没有weight这个键,所以就加添加了,打印出来如下:
    print(stu)      # {'name': '小明', 'age': 18, 'height': 177, 'weight': 70}
    
    stu['age'] = 28    字典中有age这个键  就把这个值赋值给原来的age,如下:
    print(stu)      # {'name': '小明', 'age': 28, 'height': 177, 'weight': 70}
    
    
    
    

    2)字典.setdefault(键, 值) - 添加键值对(只会在键不存在的时候实现添加的功能,键存在无作为)

    stu = {'name': '小明', 'age': 18, 'height': 177}
    stu.setdefault('weight', 80)     解析:原字典没有weight这个键 就加上
    print(stu)    
    #{'name': '小明', 'age': 18, 'height': 177, 'weight': 80}
    
    stu.setdefault('age', 30)      解析:原字典有age这个键  就当没有添加过 不作为
    print(stu)
    {'name': '小明', 'age': 18, 'height': 177, 'weight': 80}
    

    字典.setdefauit(键,值)的案列:

    goods = [
        {'name': '火腿肠', 'price': 1.5, 'count': 53, 'discount': 0.9},
        {'name': '泡面', 'price': 3.5, 'count': 100},
        {'name': '矿泉水', 'price': 1, 'count': 135},
        {'name': '面包', 'price': 5.5, 'count': 10, 'discount': 0.75}
    ]
    for x in goods:
        x.setdefault('discount', 1)
    print(goods)
    
    x到goods 这个字典中取每个元素,然后再给'discount'这个键进行添加操作,当这些元素中有'discount'这个键时,相当于不作为,没有的话 就把这个键和默认值添加进去,结果如下
    [{'name': '火腿肠', 'price': 1.5, 'count': 53, 'discount': 0.9},
     {'name': '泡面', 'price': 3.5, 'count': 100, 'discount': 1}, 
     {'name': '矿泉水', 'price': 1, 'count': 135, 'discount': 1}, 
     {'name': '面包', 'price': 5.5, 'count': 10, 'discount': 0.75}]
    

    删除操作

    del 字典[键] - 删除指定键对应的键值对

    stu = {'name': '小明', 'age': 18, 'height': 177, 'gender': '男'}
    del stu['height']
    print(stu)      # {'name': '小明', 'age': 18, 'gender': '男'}
    

    字典.pop(键) - 取出字典中指定键对应值并且返回

    tu = {'name': '小明', 'age': 18, 'height': 177, 'gender': '男'}
    result = stu.pop('gender')
    print(stu, result)      # {'name': '小明', 'age': 18, 'height': 177} 男
    
  4. 字典的相关操作和函数

    字典不支持+、*和比较大小,只支持比较是否相等

    in 和 not in - 判断字典中是否存在指定键

    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    print(3 in dog)     # False
    print('name' in dog)        # True
    

    dict(数据) - 将指定数据转换成字典
    数据的要求:1)数据本身是一个大序列
    2)大序列中的每个元素是有且只有两个元素的小序列,并且小序列中的第一个元素是不可变类型的数据

    data1 = ['ab', [10, 20], '10']
    print(dict(data1))      # {'a': 'b', 10: 20, '1': '0'}
    把每一个元素作为一个键值对
    
    data2 = [('age', 20), ('name', '张三'), ('gender', '男')]
    print(dict(data2))      # {'age': 20, 'name': '张三', 'gender': '男'}
    
  5. 字典的相关方法
    1字典.clear() - 清空字典
    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    dog.clear()
    print(dog)   打印结果为{}
    
    2字典.copy() - 复制字典产生一个一模一样的新字典,并且将新的字典返回
    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    dog1 = dog.copy()
    print(dog1)   复制一个一模一样的新字典
    {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    

    3

    字典.keys() - 获取字典所有的键并且返回
    字典.values() - 获取字典所有的值并且返回
    字典.items() - 将字典中的每个键值对转换一个一个的元组作为序列中的元素返回
    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    
    print(dog.keys())       # dict_keys(['name', 'age', 'type', 'price', 'color'])
    print(dog.values())     # dict_values(['旺财', 3, '土狗', 30000, '黄色'])
    print(dog.items())      # dict_items([('name', '旺财'), ('age', 3), ('type', '土狗'), ('price', 30000), ('color', '黄色')])
    
    解析:第一个返回的是键,第二个返回的时值,第三个返回的是,把键和值转换成元组作为序列的元素
    
    
    

    4字典1.update(字典2) - 将字典2中的键值对全部添加到字典1中

    dog = {'name': '旺财', 'age': 3, 'type': '土狗', 'price': 30000, 'color': '黄色'}
    
    dog.update({'a': 10, 'b': 20, 'age': 10})
    print(dog)
    打印结果为字典1dog加上字典2{'a': 10, 'b': 20, 'age': 10}  如下:
    
    {'name': '旺财', 'age': 10, 'type': '土狗', 'price': 30000, 'color': '黄色', 'a': 10, 'b': 20}
    
    

拷贝问题

直接赋值和拷贝的区别

直接赋值是让两个数据一模一样,对其中一个进行操作,另一个也会收到影响

拷贝是产生一个新的数据,对其中一个数据进行操作,另一个不会受到影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值