• 重制版 day 08字典和元组


    字典和元组

    三目运算符

    语法:

    表达式2 if 表达式1 else 表达式3 --判断表达式1是否成立,如果成立,结果为表达式2,反之结果为表达式3

    字典

    字典(dict)

    1)字典是容器型数据类型,将{}作为容器的标志,里面多个键值对用逗号隔开:{键1:值1,键2:值2…}

    2)字典是可变的(支持增删改);字典是无序的(不支持下标操作)

    3)元素的要求:字典的元素是键值对

    ​ 键的要求:a.键必须是不可变的类型数据(一般使用字符串) b.键是唯一的

    ​ 值的要求:没有要求

    字典和列表的选择:

    如果同时保存的多个数据意义相同(都是描述同一种类数据)时,使用列表

    如果同时保存的多个数据的意义不同,使用字典

    字典的查

    查单个

    查单个-获取字典某一个键对应的值

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

    2)字典.get(键)–获取字典中指定键的对应值,如果键不存在,返回None

    ​ 字典.get(键,默认值)-获取字典中指定键的对应值,如果键不存在,返回默认值

    dog={'name':'旺财','age':3,'breed':'土狗','gender':'母狗'}
    print(dog['name'],dog['age'],type(dog['name']),type(dog['age']))
    print(dog.get('breed'))
    # print(dog['color'])  # 报错
    print(dog.get('color'))  # None
    print(dog.get('color','白色'))  # 白色
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    实际应用:

    class1 = {
        'class_name': 'Python2204',
        'address': '15教',
        'lecturer': {'name': '婷婷', 'age': 18, 'qq': '726550822', 'gender': '女'},
        'class_teacher': {'name': '静静', 'tel': '110'},
        'students': [
            {'name': 'stu1', 'age': 21, 'major': '会计', 'tel': '120', 'contacts': {'name': '张三', 'tel': '162723'}},
            {'name': 'stu2', 'age': 30, 'major': '电子', 'tel': '219223', 'contacts': {'name': '小明', 'tel': '281912'}},
            {'name': 'stu3', 'age': 19, 'major': '旅游管理', 'tel': '123233', 'contacts': {'name': '小花', 'tel': '886552'}},
            {'name': 'stu4', 'age': 25, 'major': '通信', 'tel': '4444221', 'contacts': {'name': '李四', 'tel': '22342345'}},
            {'name': 'stu5', 'age': 25, 'major': '机械', 'tel': '223111', 'contacts': {'name': '王五', 'tel': '555632'}},
            {'name': 'stu6', 'age': 23, 'major': '数学', 'tel': '234234', 'contacts': {'name': '赵六', 'tel': '96533'}}
        ]
    }
    
    # 1)打印班级的名字和教室
    print(class1['class_name'],class1['address'])  # Python2204 15教
    # 2) 打印班级讲师的名字和年龄
    print(class1['lecturer']['name'],class1['lecturer']['age']) # 婷婷 18
    # 3) 打印班主任的电话
    print(class1['class_teacher']['tel'])  # 110
    # 4) 打印所有的学生的名字
    # 方法1
    students=class1['students']
    for i in students:
        print(i['name'])
    # 方法2
    result=[i['name']for i in class1['students']]
    print(result)
    # ['stu1', 'stu2', 'stu3', 'stu4', 'stu5', 'stu6']
    # 5)计算所有学生的平均年龄
    # 方法1:
    all_student=class1['students']
    total_age=stu_count=0
    for stu in all_student:
        total_age+=stu['age']
        stu_count+=1
    print('平均年龄:',total_age/stu_count)
    # 平均年龄: 23.833333333333332
    # 方法2:
    age=[i['age']for i in class1['students']]
    print(int(sum(age)/len(age)))
    # 6) 打印所有学生的联系人的名字
    # 方法1
    result=[i['contacts']['name']for i in class1['students']]
    print(result)
    print('-------------------------------分割线----------------------------------------')
    # 方法2
    all_student=class1['students']
    for i in all_student:
        print(i['contacts']['name'])
    #    ['张三', '小明', '小花', '李四', '王五', '赵六']
    # 7)打印所有联系人电话号码尾号是2的学生的名字
    # 方法1
    result=[i['name'] for i in class1['students'] if int(i['contacts']['tel'])%10 ==2]
    result1=[i['name'] for i in class1['students'] if (i['contacts']['tel'])[-1] =='2']
    print(result)
    print('-------------------------------分割线----------------------------------------')
    # 方法2
    for stu in class1['students']:
        if stu['contacts']['tel'][-1]=='2':
            print(stu['name'])
    # ['stu2', 'stu3', 'stu5']
    # 利用列表表达式的效率比循环低
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64

    如果字典套字典,可以直接利用字典[键][键]直接求值

    如果字典套列表再套字典,可以利用字典[键][键]再利用循环求值

    遍历

    语法:

    方法1:

    for 变量 in 字典:

    ​ 循环体(变量获取到的是字典的键)

    方法2:

    for 键,值 in 字典.item():

    ​ 循环体

    dog={'name':'旺财','age':3,'breed':'土狗','gender':'母狗'}
    for i in dog:
        print('i',i,dog[i])
    '''
    运行结果:
    i name 旺财
    i age 3
    i breed 土狗
    i gender 母狗
    '''
    
    for key,value in dog.items():
        print(key,value)
    '''
    运行结果:
    name 旺财
    age 3
    breed 土狗
    gender 母狗
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    字典的增删改

    1)改-修改某个键对应的值

    字典[键]=新值 -将字典中指定键的对应的值,修改成新值

    2)增 -增加键值对

    字典.[键]=值 --如果键不存在,添加键值对,如果键存在,修改值

    字典.setdefault(键,值) --如果键不存在,添加键值对,如果键存在,不会修改值

    3)删-删除键值对

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

    字典.pop(键) --取出指定键对应的值,当值被取出,键也消失

    字典的相关操作

    1.字典只支持==比较,结果为True/False

    字典支持 in ,not in -判断字典中是否含有指定键

    键 in 字典

    键 not in 字典

    dict1={'a':10,'b':20,'c':20}
    print(10 in dict1)  # False
    print('a' in dict1) # True
    
    • 1
    • 2
    • 3

    2.相关函数:len,dict,其他求和排序没有实际应用的意义

    len(字典)–获取字典中键值对的数量

    dict(数据)-将指定的数据类型转换字典

    转换要求:

    a.数据本身是一个序列

    b.序列中的元素必须是有两个元素的小序列

    c.小序列的第一个元素必须是不可变的数据类型

    注意:字典换列表时,字典所有键作为列表的元素

    3.相关方法:字典.xxx()

    1)字典.clear() -清空字典

    2)字典.copy()-复制字典,产生相同的字典

    3)字典.keys() -获取字典所有的键,返回一个序列

    ​ 字典.values() -获取字典所有值,返回一个序列

    ​ 字典.items() -将字典转换成一个序列,每一个键值对转化成一个元组

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

    元组

    元组是不可变的列表,列表中和可变性无关的内容元组全部支持

  • 相关阅读:
    EFCore学习笔记(9)——实体跟踪
    【机器学习】集成学习:使用scikitLearn中的BaggingClassifier实现bagging和pasting策略
    Makefile中诸多等号“:=, =, ?=和+=”的区别
    EthernetIP 转MODBUS RTU协议网关连接FANUC机器人作为EthernetIP通信从站
    R语言编写用户自定义函数:处理可能出错的代码、遇到错误继续处理而不停止代码运行
    Python三 —— Python迭代器、生成器、装饰器
    Keil MDK的sct分散加载文件详解
    详解设计模式:桥接模式
    【解包裹】基于Matlab实现多聚类相位展开算法
    国内首家,极越展示纯视觉城市NOA,正面对决特斯拉FSD
  • 原文地址:https://blog.csdn.net/Feifei_peng/article/details/126025961