01.字典(dict)
1.字典是容器类型(序列),以键值对作为元素(字典里面存的数据全是以键值对的形式出现的)
{key1:value1,key2:value2...}
2.键值对: 键:值(key:value)
键(key):字典中的key值要唯一,不可变的(数字、布尔、字符串和元祖,推荐使用字符串)
值(value):可以不唯一,可以是任何类型的数据
3.字典是可变的(增删改)---指的是字典中的键值对的值和个数可变。
1声明字典.
dict1 = {10: 100, 'a': 97, True: 100, (10, 10): 'start', 'a': 'A'}
print(dict1)
#列表
person1 = ['白胡子', 66, 99]
# 声明一个字典,有三个键值对,key分别是:name,age和work_age
person2 = {'name': '白胡子', 'age': 66, 'work_age': 99}
dict2 = {} # 空字典
print(type(dict2))
2.查(获取值)
获取字典的元素对应的值(字典存数据,实质还是存的value,key是获取value的手段)
字典[key] ---> 通过key获取值,
print(person2['name'])
通过字典[key]获取value的时候,如果key不存在会发生KeyError异常
# print(person2['sex']) # KeyError:'sex'
b.字典.gat(key)
print(person2.get('age'))
# 字典.get(key),如果key不存在不会报错,返回None
print(person2.get('sex')) # None -- python中的特殊值,代表没有
# 总结:确定key值肯定存在的时候用[]语法获取value。
# key值可能不存在,不存在的时候不希望报错,而是想要自己对它进行特殊处理的时候使用get获取value
person = {'name': '白胡子', 'age': 66, 'grade': 99, 'sex': 'one pice'}
# 获取性别sex,没有默认为'one pice'
if person.get('sex'):
print(person['sex'])
else:
print('one pice')
c. 遍历字典
dog = {'name': 'cc', 'color': 'black', 'age': 3}
# 遍历字典直接取到是字典的所有的key值
for key in dog:
print(key)
print(dog[key])
3.改(修改key对应的value)
字典[key]=新值 (key是本来就存在的)
dog['name'] = 'aa'
print(dog)
4.增(添加键值对)
字典[key]=值 (key本来不存在)
dog['type'] = '雪橇'
print(dog)
5.删(删除键值对)
#a. del 字典[key]
del dog['age']
print(dog)
# b. 字典.pop(key)
color=dog.pop('color')
print(color,dog)
03.字典相关的运算
1.字典不支持'+'和'*'
dict1={'a':10,'b':20}+{'c':12}
print(dict1)
2.in和not in:是判断key是否存在
computer = {'brand': '联想', 'color': 'black'}
print('color' in computer) # True
3.len()
print(len(computer)) # 2
4.字典.clear()
删除字典中所有的元素(键值对)
computer.clear()
print(computer) # {}
5.字典.copy()
# 拷贝字典中的所有的元素,放到一个新的字典中
dict1 = {'a': 1, 'b': 2}
dict2 = dict1
# 将dict1中的地址赋给dict2,两个变量只想同一块内存取余
dict3 = dict1.copy()
# 将dict1中的内存赋值到一个新的内存区域中,然后将新的地址给dict3
dict1['a'] = 100
print(dict2) # {'a': 100, 'b': 2}
print(dict3) # {'a': 1, 'b': 2}
6.字典.fromkeys(序列,默认值=None)
# 将序列中的每个值作为key,默认值为value创建一个新的字典
# 注意:默认值可以不写,写的话 只能写一个值
print(dict.fromkeys('abc'))
# {'a': None, 'b': None, 'c': None}
print(dict.fromkeys('abc', 0))
# {'a': 0, 'b': 0, 'c': 0}
print(dict.fromkeys(['name', 'age', 'sex'], 100))
# {'name': 100, 'age': 100, 'sex': 100}
7.字典.keys()
# 获取字典中所有的key,以dict_keys的形式返回
print(dict1.keys()) # dict_keys(['a', 'b'])
all_key = dict1.keys()
print(type(all_key)) # <class 'dict_keys'>
for key in all_key:
print(key)
# a
# b
8.字典.values(了解)
# 获取字典中所有的value
all_value = dict1.values()
print(all_value) # dict_values([100, 2])
9.字典.items()
print(dict1.items())
# 不推荐 占用cpu
for key, value in dict1.items():
print(key, value)
# a 100
# b 2
10.字典.setdefault(key,默认值=None)
# 给字典添加键值对.如果key本身就存在,这个方法无作为
dict1.setdefault('ab', 'abc')
dict1.setdefault('dd')
print(dict1) # {'a': 100, 'b': 2, 'ab': 'abc', 'dd': None}
11.字典.update(字典2)
# 将字典2中的键值对更新到字典1中
# 更新方式:如果字典2中的key,在字典1中是存在的。
# 就字典2中的key对应的值去更新字典1中的值。不存在就添加到
# 字典1中,也可以添加新的键值对
dict1 = {'aa': 1, 'bb': 'abc', 'cc': True}
dict1.update({'aa': 99, 'dd': 'qwq'})
print(dict1)
# {'aa': 99, 'bb': 'abc', 'cc': True, 'dd': 'qwq'}
dict2.update({'ff':123})
04.字典和列表的组合
"""
# 学生管理系统
# 1.一个系统可以存储多个学生
# 系统应该是一个容器:列表、字典、(元祖不可添加删除)
# 2.一个学生可以存储:姓名、电话、籍贯,专业,学号等
# 3.添加学生
# 4.删除学生
# 5.修改学生信息
......
# 什么时候使用列表? 什么时候使用字典?
# 1.保存的多个数据的类型是同一个类型的时候,用列表
# 例如:声明一个变量保存所有的数学成绩,所有学生信息
# 2.保存的多个数据的类型不同,就使用字典
# 例如:声明一个变量保存一个学生的信息
"""
# 1.列表中有字典
student_system = [
{'name': '白胡子', 'age': 66, 'tel': 999, 'native_place': '旧时代'},
{'name': '艾斯', 'age': 23, 'tel': 777, 'native_place': '新时代'}
]
# 取出第一个学生的籍贯
print(student_system[0]['native_place']) #旧时代
# 2.字典中有列表
py_class = {
'class_name': 'python1806',
'students': [
{'name': 'xs1', 'age': 20, 'id': '001'},
{'name': 'xs2', 'age': 20, 'id': '002'},
{'name': 'xs3', 'age': 20, 'id': '003'}
]
}
# 取班级名
print(py_class['class_name']) #python1806
# 取第三个学生名字
print(py_class['students'][2]['name']) #xs3
#练习:在班级python1806中添加一个学生,学生的信息自己输入。
name1=input('姓名:')
age1=int(input('年龄:'))
id1=input('id:')
# 一个学生对应一个字典
student={'name':name1,'age':age1,'id':id1}
#将学生对应的字典添加到列表中
py_class['students'].append(student)
print(py_class)
#练习:输入一个学生的姓名,根据姓名去删除对应的学生
name2=input("姓名:")
#获取班级所有学生
all_student=py_class['students']
#遍历取出每个学生对应的字典
for student_dict in all_student[:]:
#判断name对应的值是否和输入的要删除的姓名相同
if student_dict['name']==name2:
all_student.remove(student_dict)
print(py_class)
05.集合
集合(set)
集合是python中的一种容器类型;无序的,可变的,值唯一 除了可变的类型,其他的基本都行,数字、布尔和字符串是可以的。
1.声明一个集合
set1 = {9, 'ftr', 9} # 值唯一 只显示一个
print(set1, type(set1)) # {9, 'ftr'} <class 'set'>
# 将其他的序列转换成集合,自带一个去重的功能
set2 = set('ftrftrftr')
print(set2) # {'f', 'r', 't'}
set3 = {9, 9.9, True}
print(set3) # {9, 9.9, True}
# 除了容器类型,其他的基本都行,数字、布尔和字符串是可以的
2.查(获取元素)
# 集合不能单独获取其中的某一个元素的
# 遍历获取每一个元素
for item in set3:
print(item)
# 9
# 9.9
# True
3.增(添加元素)
**a. **集合.add(元素)
set3.add('good')
print(set3) # {9, 'good', 9.9, True}
b.集合.update(集合2):将集合2中的元素添加到集合1中
set3.update({1, 2, 3})
print(set3) # {True, 2, 'good', 3, 9, 9.9}
4.删
# 集合.remove(元素)
set3.remove('good')
print(set3) # {True, 2, 3, 9, 9.9}
# 删除所有的元素
set3.clear()
print(set3) # set()
5.改(不得行)
6.数学相关的集合运算
a.判断包含情况:
集合1>=集合2 : 判断集合1中是否包含集合2
集合1<=集合2 : 判断集合2中是否包含集合1
print({1,2,3,4,5}>={2,3,1,10}) #False
print({2,3,1}<={1,2,3,4,5}) #True
b.求并集:|
set1={1,2,3,4,5,6}
set2={1,2,3,14,15,16}
print(set1|set2) #{1, 2, 3, 4, 5, 6, 14, 15, 16}
c.求交集: &
print(set1&set2) #{1, 2, 3}
d.求差集:-
print(set2-set1) #{16, 14, 15}
e.求补集:
#求两个集合中除去公共部分以外的部分
print(set1^set2) #{16, 4, 5, 6, 14, 15}
06.作业
print('======================')
print("python1806班管理系统".center(20))
print("1.添加学生", '\n'"2.查看学生", '\n'"3.删除学生", '\n'"4.退出")
print('======================')
py_system={'students':[]}
all_students={}
new_stdents={}
for x in range(10000):
num1 = int(input("请输入选项(1.添加学生.2.查看学生.3.删除学生.4.退出):"))
if num1 == 1:
name1=input("请输入姓名:")
age1=input("请输入年龄:")
ele1=input("请输入号码:")
student1={'name':name1,'age':age1,'ele':ele1}
py_system['students'].append(student1)
print("添加信息成功")
print('======================')
elif num1 == 2:
print(py_system['students'])
print('======================')
elif num1 == 3:
name2=input("查找需要删除的姓名:")
all_students=py_system['students'].copy()
for new_stdents in all_students[:]:
if new_stdents['name']==name2:
py_system['students'].remove(new_stdents)
print('删除成功!!!')
print('======================')
else:
print("已退出")
break