day07_python_字典
一、字典
1.字典(dict):字典是容器类型的数据,也是序列,以键值对作为元素(字典里面存的数据全是成对出现的)
键值对:key:value
{key1:value1,key2:value2,...}
键:(key)字典中的key值要唯一,并且数据是不可变的数据类型(数字、布尔、字符串和元组,推荐使用字符串):
值:(value)可以不唯一,可以是任何类型的数据
2.声明字典
dict1 = {'1':100,'a':97,True:'布尔'}
person = {'name':haha,'age':23,'work_age':5}
person3={} #空的字典
3.获取字典的元素对应的值(字典存数据,实质还是存的value,key是获取value的手段)
字典[key]---通过key获取值
4.字典的是可变的(增删改)---可变指的是字典中的键值对的值和个数可变的
1).查:获取值
字典[key]---通过key获取值
通过字典[key]获取value的时候,如果key不存在就会发生KeyError异常
字典.get(key)---这样获取字典的value值,如果获取的key值不存在,不会报错,返回的结果是None
perosn.get('name')
person.get('sex') #None
总结:确定key值肯定存在的时候用[]语法获取value,key值可能不存在,不存在的时候希望报错用[],想要自己对它进行特殊处理的时候使用get获取value
2)遍历字典:直接遍历取到的是字典的所有key值
for key in person:
print(person[key])
3).改(修改key对应的value)
字典[key]=new_value
4).增(添加键值对)
字典[key] = 值 #key本来不存在对应的是增加
5)删(删除键值对)
del 字典[key]
del person['sname']
字典.pop(key):将字典里的指定的key的value取出,并将原来的键值对删除
name = person.pop('name')
person ={'name':'张三','age':24,'grade':90}
if person.get('sex')==None:
person['sex']='男'
5.字典的运算
1).字典不支持'+'和'*'
2). in 和not in:是判断key值是否存在
computer = {'brand':'联想','color':'black' }
3)len(字典):看字典有几个键值对
len(computer)
6.字典的方法
a.字典.clear():删除字典中的所有元素(键值对)
computer.clear()
print(computer)
b.字典.copy():拷贝字典中的所有元素,放到一个新的字典中
dict1={'a':1,'b':2}
dict2 = dict1 #将dict1中的地址赋给dict2,两个变量指向同一块内存区域
dict3=dict2.copy() #将dict1中的内存复制到一个新的内存区域中然后将新的地址给dict3
7.dict.fromkeys(序列,默认值=None)
将序列中的每个值作为key,默认值为value创建一个新的字典
注意:默认值可以不写,写的话只能写一个值
print(dick.fromkeys('abc',0)) #{'a':0,'b':0,'c':0}
8.字典.keys()
获取字典中的所有key,以dict_keys列表的形式返回
print(dict1.keys())
9.字典.values()
获取字典中的所有的value
10.字典.items():以元组形式获取字典的每个键值对,这种方式不推荐使用,对cpu的消耗更大,因为要先进行转换dict.items()
for key,value in dict.items():
11.字典.setdefault(key,默认值=None):给字典添加键值对,如果key存在,这个方法无作为
dict1.setdefault('ab','abc')
dict1.setdefault('dd')
print(dict1)
12.字典1.update(字典2):将字典2中的键值对更新到字典1中,如果字典2中key在字典1中存在,就用字典2中key对应的值取更新字典1中的值,如果不存在就添加到字典1中
dict1={'a':1}
dict2={'b':2,'a':2}
dict1.update(dict2)
print(dict1)
#{'a':2,'b':2}
学生管理系统
1.一个系统可以存储多个学生
2.一个学生可以存储:姓名,电话,籍贯,专业,学号等等
3.添加学生
4.删除学生
5.修改学生的信息
studnet_system = 列表
什么使用列表?什么时候使用字典
1.保存的多个数据的类型都是同一个类型对象时候,用列表
例如:声明一个变量保存所有数学成绩,声明一个变量保存所有的学生信息
2.保存的多个数据的类型不同,使用字典
1.列表中有字典
student_system=[
{'name':'stu1','age':18},
{'name':'stu2','age':19}
]
print(student_system[0]['name'])
2.字典中有列表
py_class={
'class_name':'python1806',
'students':[
{'name':'stu1','age':18},
{'name':'stu2','age':19}
]
}
print(py_class['students'][0]['name'])
练习:在python1806中添加一个学生,学生的信息自己输入,名字、年龄和id
py_class={
'class_name':'python1806',
'students':[
{'name':'student1','age':20,'id':'001'},
{'name':'student2','age':20,'id':'002'},
{'name':'student3','age':20,'id':'003'}
]
}
name=input("请输入姓名:")
age=input('请输入年龄:')
id_=input("请输入id:")
student={'name':name,'age':int(age),'id':id_}
py_class['students'].append(student)
print(py_class['students'])
练习:输入一个学生的姓名根据,姓名取删除对应的学生
py_class={
'class_name':'python1806',
'students':[
{'name':'student1','age':20,'id':'001'},
{'name':'student2','age':20,'id':'002'},
{'name':'student3','age':20,'id':'003'}
]
}
def input_message(py_class):
name=input("请输入姓名:")
age=input('请输入年龄:')
id_=input("请输入id:")
student={'name':name,'age':int(age),'id':id_}
py_class['students'].append(student)
print(py_class['students'])
def del_student(py_class):
name=input('请输入要删除学生的姓名:')
students=py_class['students']
for student in students:
if student['name']==name:
py_class['students'].remove(student)
print('删除成功')
exit(0)
print('你输入的学生不存在')
二、集合(set)
集合是python中的一种容器类型的数据,无序的但是是可变的,值唯一(和字典的key一样)
1.声明一个集合
set1={数据1,数据2,...数据n}
和数学里面的集合差不多
sum(序列):python内置求序列的中元素的和的方法
注意:将其他的序列转换成集合自带一个去重的功能
set2 = set{'name name'}
2.查(获取集合中的元素)
集合是不能单独获取其中某一个元素的
遍历获取每一个元素
for item in set3:
print(item)
3.增(添加元素)
a.集合.add(元素)
set3.add('good')
b.集合1.update(集合2):将集合2中的元素,添加到集合1中
set3.update({1,2,3})
4.删:删除元素只有remove
集合.remove(元素)
set3.remove('abc')
5.改(改不了)
6.数学相关的集合运算
a.判断包含情况
集合1>=集合2(判断集合1中是否包含集合2)
集合1<=集合2(判断集合2中是否包含集合1)
print(set1 >= set2)
b.并集:|
两个集合合并
set1={1,2,3}
set2={2,3,4,5}
print(set1 | set2) #1,2,3,4,5
c:交集:&
两个集合公共部分
print(set1 & set2) #2,3
d:差集:-
print(set2-set1) #1
e:补集:^
两个集合除了公共部分以外的部分
print(set1^set1) #1,4,5