20230411-Python-集合与字典-day8

发布时间 2023-04-12 00:06:25作者: xiao智

集合与字典

4月11

创建集合

创建集合使用 {}set{} ,但是如果要创建空集合只能使用 set() ,因为 {} 用来创建空字典

s1 = {10, 20, 30, 40, 50}
print(s1)

s2 = {10, 30, 20, 10, 30, 40, 30, 50}
print(s2)

s3 = set('abcdaffd')
print(s3, type(s3))

s4 = set()
print(type(s4))

s5 = {}
print(type(s5))
  • 集合可以去掉重复数据;
  • 集合数据是⽆序的,故不⽀持下标

集合常见操作方法

添加数据
  • add():
s1 = {10, 20}
s1.add(20)
print(s1)

s2 = {10, 20, 30}
s2.add("yuwen")
print(s2)	

因为集合有去重功能,所以,当向集合内追加的数据是当前集合已有数据的话,则不进⾏任何操作

  • update():追加的数据是序
s1 = {10, 20}
# s1.update(100) # 报错
s1.update([100, 200])
s1.update('abc')
print(s1)
删除数据
  • remove():删除集合中的指定数据,如果数据不存在则报错
s1 = {10, 20}
s1.remove(10)
print(s1)

s1.remove(10)
print(s1)
  • discard():删除集合中指定的数据,如果数据不存在不会报错
s1 = {1, 2, 3, 4}
s1.discard(1)
print(s1)
s1.discard(1)
  • pop():随机删除集合中的一个数据,并返回一个数据
s1 = {10, 20, 30, 40, 50, 60}
num = s1.pop() #删除的数据
print(s1)		#删除后的数据
print(num)
查找数据

in:判断数据在集合列表

not in:判断集合不在列表

字典的应用场景

一个班级,100人,如何快速的存储姓名,性别,年龄?

字典里面的数据是以键值对形式出现,字典数据和数据顺序没有关系,字典不支持下标,后期无论数据如何变化,只需要按照对应的键值名字查询数据即可。

姓名:张三,年龄:22,性别:男
姓名:李四,年龄:21,性别:男
姓名:王五,年龄:24,性别:男
姓名:阿坤,年龄:25,性别:男

创建字典

  • 字符为大括号
  • 数据为键值对形式
  • 各个键值对之间用逗号隔开
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
dict2 = {}
dict3 = dict()

字典常见操作

增加数据

写法:字典序列[key]=值

注意:如果key存在则修改这个key对应的值,如果key不存在则新增加一个键值对

dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
dict1['name'] = '李四'	#修改一个存在的key
print(dict1)

dict1["id"] = 10		  #修改一个不支持的key
print(dict1)

#输出结果
{'name': '李四', 'age': 20, 'gender': '男'} 1864852332032
{'name': '李四', 'age': 20, 'gender': '男', 'id': 10} 1864852332032

注意:输出结果可见,字典为可变类型,返回的id一样

删除数据
  • add()/del:删除字典或者删除字典中指定键值对
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
del dict1['gender']
print(dict1)

del dict1			#删除这个字典变量名
print(dict1)


#输出结果
{'name': 'yuwen', 'age': 20}
NameError: name 'dict1' is not defined
  • clear():清除字典
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
dict1.clear()
print(dict1)

#输出结果
{}
修改数据

写法:字典序列号[key]=值

注意: 如果key存在则修改这个key对应的值,如果不存在则新增加键值对

dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
dict1['name'] = '李四'
print(dict1)

#输出结果
{'name': '李四', 'age': 20, 'gender': '男'}
查找数据

key根据键查找值

dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
print(dict1['name'])
print(dict1['id'])			#查询一个不在的key会报错

#输出结果
yuwen
KeyError: 'id'
  • get()
# 字典序列.get(key, 默认值)
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
print(dict1.get('name'))
print(dict1.get(id))

#输出结果
yuwen
None
  • keys():查找所有的键
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
print(dict1.keys())

#输出结果
dict_keys(['name', 'age', 'gender'])
  • values():查找所有的值
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
print(dict1.keys())
print(dict1.values())

#输出结果
dict_values(['yuwen', 20, '男'])
  • items():查找所有的键值对
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
print(dict1.items())

#输出结果
dict_items([('name', 'yuwen'), ('age', 20), ('gender', '男')])

字典的循环遍历

for循环
遍历字典key
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
for key in dict1:
    print(key)
    
#输出结果
name
age
gender
遍历字典的value
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
for values in dict1.values():
    print(values)
    
#输出结果
yuwen
20
男
遍历字典的元素
dict1 = {'name': 'yuwen', 'age': 20, 'gender': '男'}
for items in dict1.items():
    print(items)
    
#输出结果
('name', 'yuwen')
('age', 20)
('gender', '男')

综合练习

1、本次考试张三60分, 李四80, 王五99分, 小宋56分, 请使用字典来表达此数据结构, 并筛选出来不及格的同学及分数

mark = {'张三': 60, '李四': 80, '王五': 99, '小宋': 56}
pass1 = {}
for itmes in mark.items():
    if 60 > itmes[1]:
        print(f"{itmes[0]} 同学不及格了")
        
#输出结果
小宋 同学不及格了