二、字典
字典基础
-
什么是字典(dict)
python提供的容器型数据类型,可变并且无序
可变 - 支持元素的增删改
无序 - 没有固定的位置,不支持下标操作 -
字面量和元素
用{}括起来,里面有多个键值对,每个键值对用逗号隔开,每一个键值对是字典的元素
{key1:value1, key2:value2, ···}
键值对 - key:value;键值对必须成对出现,键值对脱离字典没有意义
键 - 必须是不可变的,而且是唯一的。实际一般将字符串作为键
值 - 可以使任意类型的数据注意,字典存储数据,实质是通过值来存储的。key是值对应的标签和获取值的方式
dict1 = {} #空字典 print(type(dict1)) dict1 = {'a': 100, 10:200, (1,2):456} #key唯一且不可变 print(dict1,type(dict1))
-
什么时候使用字典?
多个没有相同意义的数据(需要区分)就使用字典。例如:保存一个人的不同信息
什么时候使用列表:
存储的多个数据是由相同意义的数据(不需要区分)就是用列表。例如:保存一个班的学生信息dict1 = {'name': '郭锐', 'age': 25, 'sex': '人妖', 'height': 170, 'weight': 45} print(dict1['age']) print(dict1.items()) # 练习:声明一个变量,保存一个班的学生信息,每个学生需要保存 姓名 电话 年龄 stuInfo1 = {'name': '郭锐', 'tel': 110, 'age': 88} stuInfo2 = {'name': '高龙伟', 'tel': 110, 'age': 24} stuInfo3 = {'name': '俞雷', 'tel': 110, 'age': 23} stuInfo4 = {'name': '赵一飞', 'tel': 110, 'age': 22} stuInfo5 = {'name': '李源', 'tel': 110, 'age': 24} stuInfo = [stuInfo1, stuInfo2, stuInfo3, stuInfo4, stuInfo5] print(stuInfo[0].keys())
字典的增删改查
-
查(获取元素的值)
注意:字典中的键值对单独拿出来没有意义
-
字典[key] —— 获取key对应的值
car = {'color': 'yellow', 'type': '跑车', 'price': '5000w'} print(car['color']) print(car['type']) print(car['price']) # 当key不存在的时候会报错KeyError
-
字典.get(key) - 获取key对应的值 - key不存在的时候不会报错,并且取到一个默认值None
字典.get(key,值1) - 获取key对应的值 - key不存在的时候报错,并且取到值1
不支持切片print(car.get('type')) print(car.get('speed')) print(car.get('color', '红色')) print(car.get('speed', 0))
-
遍历字典
注意:直接通过for in 循环取到的是keydict1 = {'a': 100, 'b': 200, 'c': 300} # 遍历字典取到的是key (推荐使用) for key in dict1: # key print(key, end=':') # value print(dict1[key]) # 遍历字典的values(),获取所有的值 for value in dict1.values(): print(value) # 遍历字典的items,直接获取key和value (不建议使用) for key, value in dict1.items(): print(key, value)
-
-
增、改
-
字典[key] = 值 -- 当key不存在时,就是添加键值对,key本身就存在时就是修改key对应的值
movie = {'name': '喜羊羊与灰太狼', 'type': 'cartoon', 'time': '120min'} movie['评分'] = 7.9 print(movie) movie['type'] = 'comedy' print(movie)
-
-
删除键值对
-
del 字典[key] - 删除字典中指定的key对应的键值对
-
字典.pop(key) —— 取出字典中对应key的值
del movie['time'] print(movie) name = movie.pop('name') print(name) print(movie)
-
字典中的方法
-
比较运算
==,!=
注意:哦按段两个字典是否相等,只看键值对是否一样,不管键值对顺序
字典不支持>和<符号
print({'a': 11, 'b': 22} == {'a': 11, 'b': 22}) print({'a': 11, 'b': 22} == {'b': 22, 'a': 11}) True True
-
in / not in
key in 字典
key not in 字典 ------判断指定的key值是否存在于字典中dict1 = {'a':1 ,'z': 2, 'c':3} print('a' in dict1) print('d' not in dict1)
3 .len(),max(),min(),sum()
dict(数据) - 数据要求是序列,并且序列中的元素都是有两个元素的子序列# 获取字典中键值对的个数 print(len(dict1)) # 获取字典中key的最大值,min()一样 print(max(dict1)) #将序列转换为字典(字符串除外) print(sum(dict1.values())) print(dict([(1 ,2), (3 ,4)])) # 字典转列表/集合/元组 都是将字典中的key取出,作为对应的元素 print(list(dict1)) print(list(dict1.values()))
-
相关方法
-
字典.clear() -- 清空字典
注意:清空容器推荐使用clear操作,而不是重新赋一个空的容器
只有容器本身不存在的时候用{}
否则就用字典.clear() -
字典.copy() -- 复制字典中的元素产生一个新的字典
直接赋值,修改其中一个元素,会影响另外一个
拷贝赋值,会产生新的地址,赋值后相互不影响 -
dict.fromkeys(序列,值) -- 以序列中所有的元素为key,指定的值作为value
new_dict = dict.fromkeys('abc', 10) print(new_dict) new_dict = dict.fromkeys(['name', 'age', 'sex'], '待定') print(new_dict)
-
-
字典.keys() - 将所有的key取出,并产生一个新的序列
字典.values() - 将所有的value取出,产生一个新的序列
字典.items() - 将所有的键值对取出,并且将每一个键值对作为一个元组,产生一个新的序列 -
字典.setdefault(key, value = None) - 当key不存在时,添加键值对 key:None
字典.setdefault(key, value) - 当key不存在时,添加键值对 key:value
当key存在的时候,不会修改当前值 -
字典1.update(字典2) - 将字典2中的键值对去更新字典1,如果字典2中的key,字典1中本身就存在就修改字典1中的key的value,如果key不存在,就添加
dict2 = {'name': 'xiaohua', 'color': 'black', 'height': 180} dict2.update({'height': 165, 'age':18}) print(dict2)
网友评论