Chapter 6 字典的相关内容

Chapter 6 字典的相关内容

Statement文章声明:仅作为个人学习笔记,一切失误概不负责。不杠不贬,文明网络环境建设!!


用一个容器同时保存多个数据的时候的建议:

​ 多个数据的意义相同 - 列表

​ 多个数据的意义不同 - 字典

认识字典

  • 字典(dict)
"""
1) 容器型数据类型
    {} - 容器标志
    元素 - 键值对, 逗号隔开{键1: 值1, 键2: 值2, ...}
2) 可变 - 增删改
3) 无序 - 不支持下标
4)元素要求:
    a. 键: 不可变数据类型的数据; 唯一
    b. 值: 没有要求
"""

字典的查操作

  • 查单个(重要) - 获取单个值
"""
语法1: 字典[键] - 获取指定键对应的值, 键不存在时报错
语法2: 字典.get(键) - 获取指定键对应的值, 键不存在时返回空,不报错
语法3: 字典.get(键, 默认值) - 获取指定键对应的值, 键不存在时返回默认值,不报错

注意: 语法1 效率比 语法2 语法3 略高
"""
  • 遍历
"""
语法1:
for key in dict:
    循环体
    
语法2;
for value in dict.values():
    循环体
 
语法3:   
for key in dict.keys():
    循环体

语法4:    
for key, value in dict.items():
    循环体 
"""

字典的增删改

  • 增, 改
"""
语法1: dict[key] = value - key不存在: 添加key: value
                           key存在: 修改key对应的 value
语法2: dict.setdefault(key, value) - key存在: 添加key: value
                                    key不存在: 无效果
语法3: 字典.update(字典/可以用dict()转换为列表的其他序列) - 可增可改
"""
"""
1) del dict[key] - 删除指定key对应的key:value
2) dict.pop(key) - 取出指定key对应的value(必须给key, 否则报错)
"""

字典相关操作和方法

  • 字典相关操作

in, not in, ==

"""
不支持: +, *, 比较大小
支持: 比较相等, in, not in

字典的in和not in判断的是是否存在指定的键
"""
  • 字典相关函数

len, dict

  • 字典转换为其他序列(如列表), 将字典的key作为列表的元素

dict(数据) - 将指定数据转换成字典

"""
字典.keys() - 获取所有的键, 返回键的序列
字典.values() - 获取所有的值, 返回值的序列
字典.items() - 获取所有键值对, 以二元组形式返回键值对序列
"""
  • 字典相关方法: 字典.方法()

字典.clear() - 清空字典

字典.copy() - 拷贝原字典, 返回新字典

字典.get()

字典…setdefault()

"""
字典.keys() - 获取所有的键, 返回键的序列
字典.values() - 获取所有的值, 返回值的序列
字典.items() - 获取所有键值对, 以二元组形式返回键值对序列
"""

字典1.update(字典2) - 将字典2中所有的键值对都添加到字典1

"""
也可以实现改的功能, 同时可以进行类型转换后的增

"""
print('--' * 10, '分割线', '--' * 10)
dict1 = {'a': 10, 'b': 20, 'c': 30}
dict1.update({'name': '张三', 'age': 35})
print(dict1)
dict1.update([('d', 40), ('e', 50), ('a', 60)])
print(dict1)

字典推导式

"""
结构1:    {表达式1: 表达式2 for 变量 in 序列}
结构2:    {表达式1: 表达式2 for 变量 in 序列 if 条件语句}
"""

练习题

  1. 定义一个变量保存一个学生的信息,学生信心中包括:姓名、年龄、成绩(单科)、电话、性别

    information = {
        'name': '张三',
        'age': '22',
        'score': '80',
        'tel': '7812873217',
        'gender': 'male'
    }
    
  2. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

    students = [
        {'name': '张三', 'age': '22', 'score': '40', 'tel': '78876327717', 'gender': 'male'},
        {'name': '李四', 'age': '24', 'score': '88', 'tel': '78189887218', 'gender': 'female'},
        {'name': '赵三', 'age': '19', 'score': '65', 'tel': '78128573218', 'gender': 'male'},
        {'name': '王五', 'age': '30', 'score': '47', 'tel': '78812873217', 'gender': 'female'},
        {'name': '宋七', 'age': '24', 'score': '98', 'tel': '78124873217', 'gender': '不明'},
        {'name': '刘三', 'age': '27', 'score': '67', 'tel': '78128763217', 'gender': 'male'},
    ]
    
    1. 统计不及格学生的个数

      count = 0
      for i in students:
          if int(i['score']) < 60:
              count +=1
      print(count)
      
    2. 打印不及格未成年学生的名字和对应的成绩

      for i in students:
          if int(i['score']) < 60:
              print(i['name'], i['score'])
      
    3. 求所有男生的平均年龄

      ages_male = [int(x['age']) for x in students if x['gender'] == 'male']
      print(sum(ages_male) // len(ages_male))
      
    4. 打印手机尾号是8的学生的名字

      print([x['name'] for x in students if x['tel'][-1] == '8'])
      
    5. 打印最高分和对应的学生的名字

      scores = [x['score'] for x in students]
      max_name = [x['name'] for x in students if x['score'] == max(scores)]
      print(max(scores), max_name)
      
    6. 删除性别不明的所有学生

      for x in students:
          if x['gender'] == '不明':
              students.remove(x)
      
    7. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

      students2 = []
      # 取出成绩作为一个列表
      scores = [x['score'] for x in students]
      # ['40', '88', '65', '47', '98', '67'] 进行排序
      scores = sorted(scores, reverse=True)
      # 排序后 ['98', '88', '67', '65', '47', '40']
      # 依次把为这个成绩的字典加入到新列表 students2
      for x in scores:
          for y in students:
              if x == y['score']:
                  students2.append(y)
      print(students2)
      
  3. 定义一个变量保存一个班级的信息,班级信息中包括:班级名称、教室位置、班主任信息、讲师信息、班级所有的学生(根据实际情况确定数据类型和具体信息)

    class1 = {
        'name': 'Python2202',
        'address': '14教室',
        'lecturer': {'name': '余婷', 'qq': '726550822', 'gender': '女', 'age': 18},
        'head_teacher': {'name': '舒玲', 'tel': '110', 'gender': '女', 'age': 18},
        'students': [
            {'name': '232', 'tel': '120', 'gender': '男', 'major': '软件工程', 'age': 20, 'linkman': {'name': 'p1', 'tel': '29372'}},
            {'name': 'stu1', 'tel': '62736', 'gender': '女', 'major': '电子信息', 'age': 23, 'linkman': {'name': 'p2', 'tel': '78221'}},
            {'name': 'stu2', 'tel': '1292831', 'gender': '女', 'major': '会计', 'age': 27, 'linkman': {'name': 'p3', 'tel': '28239'}},
            {'name': 'stu3', 'tel': '72289392', 'gender': '男', 'major': '数学', 'age': 21, 'linkman': {'name': 'p4', 'tel': '29102'}},
            {'name': 'stu4', 'tel': '2737288', 'gender': '女', 'major': '计算机', 'age': 32, 'linkman': {'name': 'p5', 'tel': '236721'}},
            {'name': 'stu5', 'tel': '27361028', 'gender': '男', 'major': '物理', 'age': 19, 'linkman': {'name': 'p6', 'tel': '34293'}},
            {'name': 'stu6', 'tel': '829129', 'gender': '男', 'major': '石油', 'age': 22, 'linkman': {'name': 'p7', 'tel': '229311'}}
        ]
    }
    ]
    
  4. 已知一个列表保存了多个狗对应的字典:

    dogs = [
      {'name': '贝贝', 'color': '白色', 'breed': '银狐', 'age': 3, 'gender': '母'},
      {'name': '花花', 'color': '灰色', 'breed': '法斗', 'age': 2},
      {'name': '财财', 'color': '黑色', 'breed': '土狗', 'age': 5, 'gender': '公'},
      {'name': '包子', 'color': '黄色', 'breed': '哈士奇', 'age': 1},
      {'name': '可乐', 'color': '白色', 'breed': '银狐', 'age': 2},
      {'name': '旺财', 'color': '黄色', 'breed': '土狗', 'age': 2, 'gender': '母'}
    ]
    
    1. 利用列表推导式获取所有狗的品种

      [‘银狐’, ‘法斗’, ‘土狗’, ‘哈士奇’, ‘银狐’, ‘土狗’]

      print([x['breed'] for x in dogs])
      
    2. 利用列表推导式获取所有白色狗的名字

      [‘贝贝’, ‘可乐’]

      print([x['name'] for x in dogs if x['color'] == '白色'])
      
    3. 给dogs中没有性别的狗添加性别为 ‘公’

      for i in dogs:
          i.setdefault('gender', '公')
      print(dogs)
      
    4. 统计 ‘银狐’ 的数量

      print(len([x for x in dogs if x['breed'] == '银狐']))
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值