2022.09.27 周二
字典
1.字典的作用
需求:定义一个变量保存一个学生的信息
2.字典和列表的选择
如果要保存多个意义不同的数据,就是用字典;需要保存多个意义相同的数据就用列表
3.什么是字典(dict)
字典是系统类型,属于容器型数据类型(序列)
将{}作为容器的标志,里面多个键值对(元素)用逗号隔开:{键1:值1,键2:值2,键3:值3,……}
可变(支持增删改操作);无序(不支持下标操作;顺序不影响结果)
键——必须是不可变类型的数据(数字,字符串,布尔,空值,元祖);键唯一
值——没有要求(任何类型的数据)
空字典
4. 字典的经典操作
字典存储的数据真正想要保存的是值,键只是用来对值进行区分和说明的(相当于列表中元素的下标)
1.查
-
1.查单个 ——获取单个值
- 字典[键] ——获取字典中指定键对应的值,键不存在时,程序报错
- 字典.get(键) ——获取字典中指定键对应的值,键不存在时,不会报错,返回空值None
- 字典.get(键,默认值)——获取字典中指定键对应的值,键不存在时,不报错,返回默认值
-
2.生活中列表和字典
# 需求:结合实际定义一个变量保存一个班级的信息 # 班级信息:班级名、教室、讲师、班主任、学生 class1 = { 'className': 'Python2205', 'classRoom': '11教', 'lecturer': {'name': '余婷', 'age': 18, 'tel': '13678192302', 'gender': '女'}, 'classTeacher': {'name': '燕子姐', 'age': 18, 'tel': '119', 'QQ': '8282821'}, 'students': [ {'name': 'stu1', 'age': 19, 'tel': '1922333', 'gender': '男', 'linkman': {'name': '张三', 'tel': '11923'}}, {'name': 'stu2', 'age': 28, 'tel': '8727832', 'gender': '男', 'linkman': {'name': '小明', 'tel': '19202'}}, {'name': 'stu3', 'age': 30, 'tel': '291912', 'gender': '女', 'linkman': {'name': '李四', 'tel': '1910283'}}, {'name': 'stu4', 'age': 17, 'tel': '2349183', 'gender': '男', 'linkman': {'name': '老王', 'tel': '109221567'}}, {'name': 'stu5', 'age': 16, 'tel': '27273482', 'gender': '女', 'linkman': {'name': '王五', 'tel': '119283427'}}, {'name': 'stu6', 'age': 22, 'tel': '1242402', 'gender': '男', 'linkman': {'name': '赵六', 'tel': '2091834'}} ] } ] }
-
遍历字典 ——一个一个的获取字典所有的值
-
方法1:
for 变量 in 字典:
循环体(变量获取到的是字典的键,不是值)
-
方法2:
for 变量1,变量2 in 字典.items():
循环体(变量1依次取到的是所有的键,变量2依次取到的是值)
-
2.增(添加键值对)、改(修改某个键对应的值)
- 字典[键] = 值 ——如果键不存在就添加键值对;如果键存在就修改指定键对应的值
- 字典.setdefault(键,值) ——添加键值对(只会在键不存在的时候实现添加的功能,键存在无作为)
3.删——删除键值对
- del 字典[键] ——删除指定键对应的键值对
- 字典.pop(键) ——取出字典中指定键对应的值,并且返回
5.字典的相关操作
-
字典不支持+、 =和比较大小,只支持比较是否相等
-
in 和 not in ——判断字典中是否存在指定的键
- 键 in 字典
- 键 not in 字典
-
len(字典) ——获取字典有多少个键值对
-
dict(数据) ——将指定数据转换成字典
数据的要求:1.数据本身是一个序列
2.大序列中的每个元素是有且只有两个元素的小序列,并且小序列一个元素是不可变类型的数据
6.字典的相关函数
1.字典.clear() ——清空字典
2.字典.copy() ——复制字典产生一个一模一样的新字典,并且将新的字典返回
拷贝——复制数据产生一个一模一样的新数据
-
直接赋值和拷贝的区别
- 直接赋值赋的是地址
- 拷贝是赋值元数据产生一个一模一样的新数据,并且将新的数据的地址返回
-
浅拷贝和深拷贝
-
浅拷贝:列表.copy()、字典.copy()、列表[:]、copy(可变数据)
只拷贝对象本身,对象中的子对象不拷贝
-
深拷贝:deepcopy(可变数据)
既拷贝对象本身,也拷贝对象中的子对象
-
3.
- 字典.keys() ——获取字典所有的键并且返回
- 字典.values() ——获取字典所有的值并且返回
- 字典.items() ——将字典中的每个键值对转换一个一个的元组作为序列中的元素返回
4.字典1.update(字典2) ——将字典2中的键值对全部添加到字典1中
如果字典2中的某个键值对在字典1中已经存在,该键值对会覆盖字典1的内容