6.字典和集合

1.字典的增删改查

'''
1.增加和改
字典[键] = 值	- 当键存在的时候修改键内的值,当键不存在的时候添加键值对
字典.setdefault(键,值)
'''
cat=['name':'猫','age':'5','color':'绿色','weight':'20厘米']
cat['name']='蓝色的猫'
print(cat)

cat[age]='8岁'
print(cat)

cat[new_cloor]='新橘色的颜色'
print(cat)
cat.setdefault('new_age','10岁了')
# 练习:在students中没有分数的学生中添加分数对应的键值对,分数值为零
students = [
    {'name': 'stu1', 'tel': '1234', 'score': 89},
    {'name': 'stu2', 'tel': '465', 'score': 80},
    {'name': 'stu3', 'tel': '678'},
    {'name': 'stu3', 'score': 78},
    {'name': 'stu4', 'tel': '234'}
]
for x in students:
    x.setdefult('score','0')
    print(x)
2.删 -删除键值对
del 字典[]   -删除指定的键对应的键值对,如果键不存在会报错
字典.pop(键)   -取出字典中指定键对应的值
'''

print(cat)
del cat['name']
print(cat)

del cat['color']
print(cat)

del_value=cat.pop('age')
print(del_value)

2.字典的相关操作和函数

# 字典不支持 + *,也不支持比较大小的运算符,只能支持 == !=
# in和not in - 字典的in和not in 判断的是键是否存在
# 键 in 字典
# 键 not in 字典
dic1= {'a':10,'b':20,'c':30}
print(10 in dic1)   #判断键是否存在 结果不存在  false
print('a'in dic1)   #判断键是否存在 结果存在 True
2.相关函数
len
dict(类型转换)  - 1)数据本身是一个序列
                 2)序列中的元素必须是有且只有两个元素的小序列
                 3)小序列的第一个元素必须是不可变的数据
'''
'''
3.字典相关方法
字典.clear()  - 清空字典
字典.copy     — 复制原字典产生一个一模一样的新字典
字典.update(序列)   -将序列中所有的元素都添加到字典中(如果本身存在就会覆盖)
                    序列必须是字典或者能够转换成字典的序列
items,keys,values
字典.keys()   - 获取字典所有的键,返回一个序列
'''
'''
字典的推导式
{键的表达式:值的表达式 for 变量 in 序列 if 条件语句}
'''
# 练习 通过字典的推导式交换一个字典的键和值
dic3={'a':10,'b':20}
new_dic3={dic3[key]:key for key in dic3}
print(new_dic3)

3.集合

1.什么是集合 (set)
'''
集合是容器 将{}作为容器标志,多个元素用逗号隔开:{元素1,元素2,元素3,.... }
集合是可变的,支持增删改; 集合是无序的;
元素:不可变的数据,元素是唯一的(具备自动去重的功能)
'''

# 1)空集合
set1=set()
print(type(set1),len(set1)) #<class 'set'> 0

# 2)集合是无序的
print({1,2,3})=={3,1,2}
# 3)元素必须是不可变的数据
set2={1,'abc',(2,3)}
print(set2)

# set3={1,'abc',[2,3]}
# print(set3)

# 4)元素是唯一的
set4 = {1,2,3,1,1,3}
print(set4)
2.集合元素的增删改查
# 1) 查 - 遍历
'''
for 变量 in 集合:
    循环体
'''
nums={ 23,90,89,78 }
for x in nums:
    print(x)

# 2)增
'''
集合.add(元素)  - 在集合中添加指定元素
集合.update(序列)   - 将序列中的元素全部添加到集合中
'''
nums.add(40)
for x in range(0,20):
    print(x,nums)

nums.update('abc')
print(nums)

'''
集合.remove(元素)   -删除指定元素,如果元素不存在就会报错
集合.discard(元素)  -删除指定元素,如果元素不存在不会报错
'''
nums.remove(89)
print(nums)

# nums.remove(99)
# print(nums)     #元素不存在 会报错

nums.discard(100)
print(nums)     #元素不存在 不会报错

print('++++++++++++++++++++++++++++++++')
# 4)改  -集合无法直接修改元素的值,如果非要改就将要改的元素删除,添加新的元素
3.数学集合运算:&(交集),|(并集),-(差集),^(对称差集)
# 1)集合1 & 集合2   -    获取两个集合的公共元素(获取即在集合1里面又在集合2里面的元素)
nums1={2,3,4,5,6,7,8}
nums2={8,9,10,11}
print(nums1 & nums2)

# 2)集合1 | 集合2   - 获取两个集合中所有的元素
print(nums1 | nums2)

# 3) 集合1 - 集合2  - 获取集合1中除了包含在集合2中以外的部分
print(nums1-nums2)  #{2, 3, 4, 5, 6, 7}
print(nums2-nums1)  #{9, 10, 11}

# 4)集合1^集合2     - 将两个集合合并,去掉中间公共部分
print(nums1^nums2)

names =['甄姬','貂蝉','韩信','吕布','赵云']
new_names=[]
for index,item in enumerate(names):
    names[index]
# 5)子集(有可能相等)和真子集(真的比它小)
# 集合1 > 集合2  -> 判断集合2是否是集合1的真子集
print({10, 20, 30, 40} > {1, 2})        # False
print({10, 20, 30, 40} > {10, 40})      # True
print({10, 20, 30, 40} > {10, 20, 30, 40})      # False
print({10, 20, 30, 40} >= {10, 20, 30, 40})     # True

4.课后作业

  1. 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )

     claas1=[{'name': 'stu1','age': 18, 'tel': '11233',  'score': 98, 'sex':'男' }
            {'name': 'stu2', 'age': 28, 'tel': '89992',  'score': 76, 'sex':'男' }
         {'name': 'stu3', 'age': 20, 'tel': '67888',  'score': 53, 'sex':'女' }
        	{'name': 'stu4', 'age': 28, 'tel': '89009',  'score': 76, 'sex':'女' }
        	{'name': 'stu5', 'age': 28, 'tel': '12339',  'score': 76, 'sex':'不明'}
        	{'name': 'stu6', 'age': 28, 'tel': '77777',  'score': 76, 'sex':'不明'}]
    
    1. 统计不及格学生的个数

      num=0
      for item in claas1:
          score=item['score']
          if score<60:
              num+=1
      print('不及格的学生个数'num)
      
    2. 打印不及格学生的名字和对应的成绩

      for item in claas1:
          name=item['name']
          score=item['score']
          if score<60:
              print(name,score)
      
    3. 打印手机尾号是8的学生的名字

      for item in claas1:
          name=item['name']
          tel=item['tel']
          if int(tel)%10==8:
              print(name,tel)
      
    4. 打印最高分和对应的学生的名字

      max_score=0
      for item in claas1:
          name=item['name']
          if item['score']>max_score:
              max_score=item['score']
      for x in claas1:
          if x['score']==max_score:
              print(name,max_score)
      
    5. 删除性别不明的所有学生

    6. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

  2. 用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)

    1. 求选课学生总共有多少人
    2. 求只选了第一个学科的人的数量和对应的名字
    3. 求只选了一门学科的学生的数量和对应的名字
    4. 求只选了两门学科的学生的数量和对应的名字
    5. 求选了三门学生的学生的数量和对应的名字
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值