week2day3字典

week2day3:字典

一.认识字典

1.字典和列表的选择

需要保存多个数据的时候,如果多个数据的意义相同(不需要区分)使用列表;

如果多个数据的意义不同就使用字典。

2.认识字典

#类型

(1) 是容器型数据类型

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

​ 键值对的格式: 键:值,

(3)) 空字典:dict1={}

(4)字典中的元素只能是键值对

#特点

(5)字典是可变的(支持增删改查);字典是无序(不支持下标,元素顺序不影响结果)

#对元素的要求

(6))字典的元素是键值对

(7)键的要求:a.键必须是不可变的数据类型(数字,字符串,布尔,元组等)
b.键是唯一的

(8))值的要求:没有要求

二.字典的基本操作

1.查 - 获取字典的值

(1) 查单个(重要) - 一次获取一个值

​ 语法1:字典[键] - 获取字典中指定键对应的值(获取不存在的键时会报错)

	 dog={'name':'旺财','age':3,'breed':'中华田园犬','color':'白色'}
	 print(dog['age']) #3
	 print(dog['name']) #旺财

​ 语法2:字典.get(键) - 获取字典中指定键对应的值(如果不存在该键,不会报错,返回空值)
​ 字典.get(键,默认值) - 当键不存在时,返回默认值

(2) 遍历

​ 语法1: for 变量 in 字典:
​ pass (获取字典的键)

​ 语法二:for 键,值 in 字典.itmes():
​ pass (同时获取键和值)

2.增/改 - 添加键值对

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

3.删 - 删除键值对

(1)del 字典[键] — 删除指定键对应的键值对
(2)字典.pop() — 取出指定的键对应的值

三.字典相关操作和函数

1.相关运算

(1) 字典不支持:=,*,<,>,>=,<= (只支持==,!=)
(2) in 和 not in -判断的是字典中是否存在指定的键(不是判断值或者键值对)

2.相关函数

(1)len(字典) - 获取字典中键值对的个数
(2)dict(数据) - 将其他类型的数据转换为字典

转换条件:① 数据本身是一个序列
② 序列的元素必须都是有且只有两个元素的小序列,并且其中第一个元素是不可变的数据

3.相关方法

(1)字典.clear()
(2)字典.copy()
(3)字典.keys() - 返回一个序列,序列中的元素是字典所有的键
(4)字典.values()-返回一个序列,序列中的元素是字典所有的值
(5)字典.items() - 返回一个序列,序列中的元素是由每一对键和值组成的元组
(6)字典.update(序列) - 将可以转化为字典的序列中的元素全部添加到字典中

4.字典推导式

语法1:{表达式(键):表达式(值) for 变量 in 序列}
语法2:{表达式(键):表达式(值) for 变量 in 序列 if 条件语句}

housework

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

    dict1={'name':'小明','age':18,'score':100,'tel':138231,'gender':'男'}
    print(dict1)
    
  2. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

    all_students=[
        {'name':'小明','age':18,'score':100,'tel':'138238','gender':'男'},
        {'name':'小红','age':16,'score':85,'tel':'133251','gender':'女'},
        {'name':'小蓝','age':22,'score':80,'tel':'134228','gender':'女'},
        {'name':'小王','age':18,'score':80,'tel':'135231','gender':'性别不明'},
        {'name':'小宋','age':17,'score':45,'tel':'136431','gender':'男'},
        {'name':'小李','age':16,'score':100,'tel':'138231','gender':'男'}
    ]
    
    1. 统计不及格学生的个数

      num=len([x['score'] for x in all_students if x['score']<60])
      print(num)
      
    2. 打印不及格未成年学生的名字和对应的成绩

      list1={x['name'] :x['score']   for x in all_students if x['score']<60 and  x['age']<18}
      print(list1)
      
    3. 求所有男生的平均年龄

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

      list1=[x['name'] for x in all_students if int(x['tel'])%10==8]
      print(list1)
      
    5. 打印最高分和对应的学生的名字

      max_score=0
      names={}
      for stu in all_students:
          if stu['score']==max_score:
              names.setdefault(stu['name'],stu['score'])
          elif stu['score']>max_score:
              max_score = stu['score']
              names.clear()
              names.setdefault(stu['name'],stu['score'])
      print(names)
      
    6. 删除性别不明的所有学生

      new_students=[x for x in all_students if x['gender']=='女' or x['gender']=='男']
      print(new_students)
      
    7. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

      new_students=[]
      score=[0]
      for index1,stu in enumerate(all_students):
          count = 0
          for index2 in range(index1+1):
              if stu['score']<score[index2]:
                  count+=1
          new_students.insert(count,stu)
          score.append(stu['score'])
      print(new_students)
      
  3. 定义一个变量保存一个班级的信息,班级信息中包括:班级名称、教室位置、班主任信息、讲师信息、班级所有的学生(根据实际情况确定数据类型和具体信息)

    class1={
        'class_name':"python2201",
        'class_dress':'千峰3楼',
        'class_teacher':{'name':'张瑞燕',
                         'tel':'123214',
                         'age':18},
        'lecturer' :{'name':'余婷',
                    'tel':'12233214',
                    'age':18},
        'students':[
        {'name':'小明','age':18,'score':100,'tel':'138238','gender':'男'},
        {'name':'小红','age':16,'score':85,'tel':'133251','gender':'女'},
        {'name':'小蓝','age':22,'score':30,'tel':'134228','gender':'女'},
        {'name':'小王','age':18,'score':80,'tel':'135231','gender':'性别不明'},
        {'name':'小宋','age':17,'score':45,'tel':'136431','gender':'男'},
        {'name':'小李','age':16,'score':100,'tel':'138231','gender':'男'}
    ]
    }
    print(class1)
    
  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. 利用列表推导式获取所有狗的品种

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

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

      [‘贝贝’, ‘可乐’]

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

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

      num=len([dog['breed'] for dog in dogs if dog['breed']=='银狐' ])
      print(num)
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值