总结
一.字典(dict)
1.字典是容器类型(序列),以键值对作为元素(字典里面存的数据全是以键值对的形式出现的)
{key1:value1, key2:value2...}
2.键值对:键:值(key:value)
键(key):要唯一,不可变的(数字,布尔,字符串和元祖)
值(value):可以不唯一,可以是任何类型的数据
3.字典是可变的(增删改) --- 可指的是字典中的键值对
1.声明字典
dict1 = {10: 100, 'a': 97, True: '布尔', (10, 10): 'start', 'a': 'A'}
print(dict1)
person1 = ['酒坛坛儿', 20, 5, 90]
# 声明一个字典,有三个键值对,key分别是name,age,work_age
person2 = {'name': '酒坛坛儿', 'age': 20, 'work_age': 5}
dict2 = {} # 空的字典
print(type(dict2))
2.查(获取值)
获取字典的元素对应的值(字典存数据,实质还是存的value,key是获取value的手段)
a.字典[key] --- 通过key获取值
print(person2['name'], person2['age'])
# print(person2['sex'])
# 通过字典[key]获取value的时候,如果key不存在会发生keyError异常
b.字典.get(key)
print(person2.get('age'))
# 区别就是通过字典.get(key),如果key不存在不会报错,返回None
print(person2.get('sex')) # None -- python中的特殊值,代表没有
总结:确定key值肯定存在的时候用[]语法获取value, key值可能不存在,不存在时不希望报错,而是想自己对它进行特殊处理的时候使用get获取value
c.遍历字典
cat = {'name': '绿帽', 'age': 2}
# 遍历字典直接取到字典的所有的key值
for key in cat:
print(key)
3.改(修改key对应的value)
字典[key] = 新值
cat['name'] = 'green'
print(cat)
4.增(添加键值对)
字典[key] = 值 (key本来不存在)
cat['type'] = '美短'
print(cat)
5.删(删除键值对)
a.del 字典[key]
del cat['age']
print(cat)
b.字典.pop(key)
name = cat.pop('name')
print(name, cat)
二.字典相关的运算
1.字典不支持'+'和'*'
2.in 和 not in
computer = {'brand': '联想', 'color': 'black'}
print('color' in computer)
3.len()
print(len(computer))
4.字典(clear):删除字典中所有的元素(键值对)
computer.clear()
print(computer)
5.字典.copy():拷贝字典中的所有的元素,放到一个新的字典中
dict1 = {'a': 1, 'b': 2}
dict2 = dict1 # 将dict1中的地址赋给dict2,两个变量指向同一块内存区域
dict3 = dict1.copy() # 将dict1中的内存复制到一个新的内存区域中,然后将新的地址给dict3
6.dict.fromkeys(序列,默认值=None)
将序列中的每个值作为key,默认值为value创建一个新的字典
注意:默认值可以不写,写的话只能写一个值
print(dict.fromkeys('abc', 0))
7.字典.keys()(了解)
获取字典中的key,以列表(dict_keys)的形式返回
8.字典.value(了解)
获取字典中所有的value
9.字典.items()
print(dict1.items()) # 不推荐使用
10.字典.setdefault(key,默认值=None)
给字典添加键值对,如果key本身就存在,这个方法就无作为
dict1.setdefault('a', 'abc')
print(dict1)
11.字典1.update(字典2)
将字典2的键值对更新到字典1中
更新方式:如果字典2中的key在字典1中是存在的,就用字典2中key对应的值去更新字典1中的值,不存在就添加到字典1中
dict1 = {'aa': 1, 'bb': 'abc', 'cc': True}
dict1.update({'aa': 99,'dd': '你好'})
print(dict1)
三.字典和列表的组合
学生管理系统
1.一个系统可以存储多个学生
系统应该是一个容器:列表,字典,元祖
2.一个学生可以存储:姓名,电话,籍贯,专业,学号等等
3.添加学生
4.删除学生
5.修改学生的信息...
什么时候使用列表? 什么时候使用字典?
1.保存的多个数据的类型是同一个类型时候,用列表
例如:一个变量保存所有的数学成绩,声明一个变量保存所有的学生信息
2.保存的多个数据类型不同就使用字典
例如:声明一个变量保存一个学生的信息
1.列表中有字典
student_system = [
{'name': '博丽灵梦', 'age': 20, 'tel': 777, 'address': '博丽神社'},
{'name': '芙兰朵露', 'age': 495, 'tel': 666, 'address': '红魔馆'}
]
# 取出第一个学生的籍贯
print(student_system[0]['address'])
2.字典中有列表
py_class = {
'students': [
{'name': 'student1', 'age': 20, 'id': '001'},
{'name': 'student2', 'age': 21, 'id': '002'},
{'name': 'student3', 'age': 22, 'id': '003'}
]
}
练习1:在班级python1806中添加一个学生,学生的信息自己输入,名字和年龄和id
name1 = input('name: ')
age1 = input('age: ')
id1 = input('id: ')
# 一个学生对应一个字典
student = {'name': name1, 'age': age1, 'id': id1}
# 将学生对应的字典添加到列表中
py_class['students'].append(student)
print(py_class)
练习2:输入一个学生的姓名,根据姓名去删除对应的学生
del_name = input('请输入需要删除的学生姓名')
# 获取班级所有的学生
all_student = py_class['students']
# 遍历取出每个学生对应的字典
for student_dict in all_student[:]:
# 判断name对应的值是否和输入的要删除的姓名相同
if student_dict['name'] == del_name:
all_student.remove(student_dict)
print(py_class)
四.集合(set)
集合是python中的一种容器类型:无序的,可变的,值唯一
1.声明一个集合
set1 = {1, 'abc', 100,}
print(set1, type(set1))
# 将其他的序列转换成集合,自带一个去重的功能
set2 = set('name name')
print(set2)
set3 = {10, 4.14, True, 'abc'}
print(set3)
2.查(获取集合中的元素)
集合是不能单独获取其中的某一个元素
for item in set3:
print(item)
3.增(添加元素)
a. 集合.add(元素)
set3.add('good')
print(set3)
b.集合1.update(集合2):将集合2中的元素,添加到集合1中
set3.update({1, 2, 3})
print(set3)
4.删
集合.remove(元素)
set3.remove('abc')
print(set3)
删除所有的元素
set3.clear()
print(set3)
5.改(改不了)
6.数学相关的集合运算
a.判断包含情况:
集合1>=集合2: 判断集合1中是否包含集合2
集合2>=集合1: 判断集合2中是否包含集合1
b.求并集
set1={1, 2, 3,}
set2={1, 2, 7, 8}
print(set1 | set2)
c.求交集:&
求两个集合的公共部分
print(set1 & set2)
d.求差集:-
print(set1 - set2)
e.求补集:^
求两个集合中除了公共部分以外的部分
print(set1 ^ set2)
作业
students = [
{'name':'小明','age':18,'sex':'男','id':'001'},
{'name':'小红','age':19,'sex':'女','id':'002'}
]
# 进入主程序
while True:
print('======================学生管理系统====================\n'
'1.添加学生信息\n'
'2.查看学生信息\n'
'3.修改学生信息\n'
'4.删除学生信息\n'
'5.退出学生管理系统\n'
'======================学生管理系统====================')
key = int(input('请输入选项: '))
# 添加学生信息
if key == 1:
name = input('请输入学生姓名: ')
age = int(input('请输入学生年龄: '))
sex = input('请输入学生性别: ')
id = int(input('请输入学生学号: '))
student = {'name':name,'age':age, 'sex':sex, 'id':id}
students.append(student)
print('添加成功!')
print(student)
# 进入查找学生子系统
elif key == 2:
# 显示所有学生的姓名
for student in students[:]:
print(student['name'])
# 查看学生详细信息
while True:
a = False
name = input('请输入学生姓名:')
for student in students[:]:
if student['name'] == name:
print(student)
a = True
break
# 如果没有匹配成功就提示
if a == False:
print('没有匹配中输入的学生')
key1 = input('继续查看请按1\n返回主菜单请按2: ')
if key1 == '2':
break
# 修改学生信息
elif key == 3:
for student in students[:]:
print(student['name'])
while True:
a = False
name = input('请输入需要修改的学生姓名: ')
for student in students[:]:
if student['name'] == name:
content = int(input('1.学生姓名\n2.学生年龄\n3.学生性别\n4.学生id\n请选择要修改的内容的序号: '))
if content == 1:
new_name = input('请输入学生的新名字: ')
student['name'] = new_name
print('修改成功!')
print(student)
elif content == 2:
new_age = input('请输入学生的新年龄: ')
student['age'] = new_age
print('修改成功!')
print(student)
elif content == 3:
new_sex = input('请输入学生的新性别: ')
student['sex'] = new_sex
print('修改成功!')
print(student)
elif content == 4:
new_id = input('请输入学生的新id: ')
student['id'] = new_id
print('修改成功!')
print(student)
else:
print('输入有误,请重新输入!')
a = True
break
if a == False:
print('没有匹配到该学生,请检查后输入!')
key3 = input('继续修改请按2\n返回主菜单请按3: \n')
if key3 == '3':
break
# 删除学生
elif key ==4:
for student in students[:]:
print(student['name'])
while True:
a = False
student_name = input('请输入学生姓名: ')
for student in students[:]:
if student['name'] == student_name:
students.remove(student)
a = True
if a == False:
print('输入学生不存在,请重新输入!')
key4 = input('继续删除学生请按1\n返回主菜单请按2:')
if key4 == '2':
break
# 退出程序
elif key == 5:
break