# 1.字典 存储数据 存储一个数据的属性 可以快速进行查找# dict_data = {key:value,key:value,...}# key是键# value是值# 以大括号表示# 数据是以键值对出现的 键值对中间用冒号连接# key的值必须是不可变类型# 字典和列表和集合是可变类型print('1.字典')dict_data = {}  # 创建一个空的字典print(dict_data)print(type(dict_data))dict_data = {'小明': [20, 186], '小芳': 18}print(dict_data)# 2.字典的操作 增删查改print()print('2.字典的操作,增删查改')# 2.1 增加# 字典是没有索引的# 所以字典内是没有顺序的# key是不能重复的print()print('2.1 增加')dict_data = {'小明': [20, 186], '小芳': 18}dict_data['小雨'] = 22  # 无指定的key则增加print(dict_data)# 2.2 修改print()print('2.2 修改')dict_data['小芳'] = 66  # 有指定的key则修改print(dict_data)# 2.3 删除print()print('2.3 删除')# del clear pop(key)dict_data1 = {'小明': 20, '小芳': 18, '小刚': 16}# del dict_data1  # 删除字典# print(dict_data1)  # 会报错,显示变量dict_data1没定义# del dict_data1['小明1']  # 删除字典中没有的数据会报错# print(dict_data1)del dict_data1['小明']  # 删除指定的数据print(dict_data1)dict_data1.clear()  # 清空字典print(dict_data1)dict_data1 = {'小明': 20, '小芳': 18, '小刚': 16}print(dict_data1.pop('小明'))  # 返回被删除key所对应的valueprint(dict_data1)dict_data1 = {'小明': 20, '小芳': 18, '小刚': 16}dict_data1.popitem()  # 默认删除最后一个print(dict_data1)# 2.4 查看# key keys values itemsprint()print('2.4 查看')dict_data1 = {'小明': 20, '小芳': 18, '小刚': 16}print(dict_data1['小芳'])  # keyprint(dict_data1.get('小芳666'))  # 找到则返回value,没找到则返回Noneprint(dict_data1.setdefault('小李', 222))  # 找到则返回value,没找到则返回本行的222同时将数据加入到字典中print(dict_data1)  # 输出可以看到加入了上一行的数据dict_data1 = {'小明': 20, '小芳': 18, '小刚': 16}print(dict_data1.keys())  # 返回字典中的所有key  返回的是一个序列print(list(dict_data1.keys()))  # 强转为列表print(tuple(dict_data1.keys()))  # 强转为元组dict_data1 = {'小明': 20, '小芳': 18, '小刚': 16}print(dict_data1.values())  # 返回字典中的所有value  返回的是一个序列print(type(dict_data1.values()))print(dict_data1.items())  # 返回字典中的key和value 返回的是序列# 3.字典的遍历循环print()print('3.字典的便利循环')dict_data1 = {'小明': 20, '小芳': 18, '小刚': 16}for i in dict_data1.keys():  # 输出每一个key    print(i)print()for i in dict_data1.values():  # 输出每一个values    print(i)print()for i in dict_data1.items():    print(i)  # 输出的是元组    print(i[0], i[1])print()for key, value in dict_data1.items():  # 拆包写法    print(key, value)# 4.集合 set# 没有索引 没有顺序 数据不能重复!# {数据1,数据2,数据3... }print()print('4.集合')set_data = {}  # 这是一个空的字典print(type(set_data))set_data = set()  # 创建一个空的集合print(type(set_data))set_data = {1, 2, 3, 4}print(set_data)print(type(set_data))set_data1 = {1, 2, 3, 4, 6, 2, 1, 1, 3, }  # 集合可以去重复print(set_data1)# 5.集合的查找# in# not inprint()print('5.集合的查找')set_data = {1, 2, 3, 4}print(1 in set_data)print(2 not in set_data)# 6.集合的增加# add()# updateprint()print('6.集合的增加')set_data = {1, 2, 3, 4}set_data.add(0)  # 添加的数据必须是一个不可变类型set_data.add(1)  # 重复的不会加入print(set_data)set_data = {1, 2, 3, 4}set_data.update([0, 1, 2, 3, 4, 5, 6])  # 拆开增加print(set_data)# 7.集合的删除# remove# discardprint()print('7.集合的删除')data = {200, 100, 300}data.remove(200)  # 有这个数据就是删除,没有就报错print(data)data = {200, 100, 300}data.discard(201)  # 有这个数据就删除,没有就跳过print(data)# 今日练习'''今天进行了数学考试,本次考试中小明58分,小芳80分,小刚99分,小雨46分(1)请用字典来表达此数据结构(2)筛选出不及格的同学并且打印他的名称和份数'''print()print('今日练习')name_score = {'小明': 58, '小芳': 80, '小刚': 99, '小雨': 46}  # 使用字典存储学生姓名和成绩for name, score in name_score.items():  # 拆包写法    if score < 60:  # 如果成绩不及格        print(name, score)  # 则打印名字和成绩