day8 字典和集合
1,字典的增 删 改
1), 增和改
"""
字典[键] = 值 - 当键存在的时候是修改对应的值:当键不存在的时候是添加键值对
字典.setdefault(键,值) - 添加键值对(当键存在的时候不会修改原来的值)
"""
举例:
cat = {'name':'美美','age':2,'color':'白色'}
print(cat)
#添加
cat['breed'] = '蓝猫'
print(cat)
#修改
cat['age'] = 3
print(cat)
cat.setdefault('weight',8)
print(cat)
cat.setdefault('age',4)
print(cat)
练习:
# 练习:在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 stu in students:
stu.setdefault('score',0)
stu.setdefault('tel',0)
print(students)
2), 删 - 删除键值对
"""
del 字典[键] - 删除字典中指定键对应的键值对(如果键不存在会报错)
字典.pop(键) - 取出字典中指定键对应的值(如果键不存在会报错)
"""
举例:
print(cat)
del cat['color']
print(cat)
del_value = cat.pop('breed')
print(cat)
print(del_value)
2,字典相关操作和函数
1), 相关操作
#字典不支持 + ,*, 也不支持比较大小的运算符。
#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)小序列的第一个元素必须是不可变的数据
"""
举例:
data = [('a',10),('b',20)]
print(dict(data))
data2 = ['ab',range(2),[10,20]]
print(dict(data2))
data3 = ('ab','cd',range(1,3))
print(dict(data3))
#data4 = ('abc',cd',range(,3))
#print(dict(data4)) #报错
字典转换成列表/元组
dic2 = {'a':10,'b':20,'c':30}
print(list(dic2)) #['a', 'b', 'c']
3),字典相关方法
"""
字典.clear() - 清空字典
字典.copy - 复制原字典产生一个一摸一样的新字典
item keys values -
字典.update(序列) - 将序列中所有的元素都添加到字典中(如果本身就存在就会覆盖)。序列必须是字典或者能够转换成字典的序列
字典.keys() - 获取字典所有的键,但会一个序列(这个序列不是列表和元组)
"""
举例;
data3 = {'d':100,'e':200}
print(dic2)
dic2.update(data3)
print(dic2)
dic2.update(['xy','mn'])
print(dic2)
dic2.update({'d':1000,'f':2000})
print(dic2)
print(dic2.keys()) #dict_keys(['a', 'b', 'c', 'd', 'e', 'x', 'm', 'f'])
print(dic2.values()) #dict_values([10, 20, 30, 1000, 200, 'y', 'n', 2000])
print(dic2.items()) #dict_items([('a', 10), ('b', 20), ('c', 30), ('d', 1000), ('e', 200), ('x', 'y'), ('m', 'n'), ('f', 2000)])
4), 字典推导式
"""
{键的表达式:值的表达式 for 变量 in 序列}
{键的表达式:值的表达式 for 变量 in 序列 if 条件语句}
"""
练习:通过字典的推导式交换一个字典的键和值
"""{'a':10,'b':20} ->{10:'a',20:'b'}"""
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,2,1}) #True
3], 元素必须是不可变的数据
et2 = {1,'acb',(2,3)} #{(2, 3), 1, 'acb'}
print(set2)
注意:
set3 = {1,'acb',[2,3]} #报错
print(set3)
4], 元素是唯一的
set4 = {1,2,3,4,1,2,4}
print(set4) #{1, 2, 3, 4}
2), 集合元素的增删改查
1], 查 - 遍历
"""
for 变量 in 集合:
循环体
"""
nums = {23,90,89,78}
for x in nums:
print(x)
2], 增
"""
集合.add(元素) - 在集合中添加指定元素
集合.update(序列) - 将序列中的元素全部添加到集合中
"""
nums.add(45)
print(nums) #{45, 78, 23, 89, 90}
nums.update('abc')
print(nums) #{'a', 'b', 'c', 45, 78, 23, 89, 90}
3], 删
"""
集合.remove(元素) - 删除指定元素,如果元素不存在会报错
集合.discard(元素) - 删除指定元素,如果元素不存在不会报错
"""
nums.remove(89)
print(nums) #{'a', 45, 78, 'c', 'b', 23, 90}
nums.discard(90)
print(nums) #{'c', 'a', 45, 78, 'b', 23}
#nums.remove(100) #报错
nums.discard(100)
print(nums)
4],改 - 集合无法直接修改的元素的值,如果非要改就要将要改的元素删除,添加新的元素
3), 数学集合运算:&(交集),|(并集),-(差集),^(对称差集),>/<(真子集),>=/<=(子集)
1], 集合1 & 集合2 - 获取两个集合的公共元素(获取既在集合1里面又在集合2里面的元素)
num1 = {1,2,3,4,5,6,7}
num2 = {5,6,7}
print(num1 & num2) #{5, 6, 7}
2],集合1 | 集合2 - 获取两个集合所有的元素
print(num1 | num2) #{1, 2, 3, 4, 5, 6, 7}
3], 集合1 - 集合2 – 获取集合1中除了包含在集合2中以外的部分
num1 = {1,2,3,4,5,6,7}
num2 = {5,6,7,8,9}
print(num1 - num2) #{1, 2, 3, 4}
print(num2 - num1) #{8, 9}
4],集合1 ^ 集合2 - 将两个集合合并,去掉中间公共部分
print(num1 ^ num2) #{1, 2, 3, 4, 8, 9}
5], 子集(有可能相等)和真子集(真的比它小)
#集合1 > 集合2 --》 判断集合2是否是集合1的真子集
print({10,20,30,40} > {1,2}) #False
num1 = {1,2,3,4,5,6,7}
num2 = {5}
print(num1 > num2) #True