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.课后作业
-
定义一个列表,在列表中保存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':'不明'}]
-
统计不及格学生的个数
num=0 for item in claas1: score=item['score'] if score<60: num+=1 print('不及格的学生个数'num)
-
打印不及格学生的名字和对应的成绩
for item in claas1: name=item['name'] score=item['score'] if score<60: print(name,score)
-
打印手机尾号是8的学生的名字
for item in claas1: name=item['name'] tel=item['tel'] if int(tel)%10==8: print(name,tel)
-
打印最高分和对应的学生的名字
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)
-
删除性别不明的所有学生
-
将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
-
-
用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
- 求选课学生总共有多少人
- 求只选了第一个学科的人的数量和对应的名字
- 求只选了一门学科的学生的数量和对应的名字
- 求只选了两门学科的学生的数量和对应的名字
- 求选了三门学生的学生的数量和对应的名字