一、什么是字典
字典:
- Python内置的数据结构之一,与列表一样是一个可变序列
- 以键值对的方式存储数据,字典是一个无序序列
二、字典示意图:
解析:字典是无序序列,存储时不会按照顺序来存储,即第一个存入的值可能在第6个位置,第二个存储的值可能存储在第4个位置,第四个存储的值可能存储在第1个位置。列表存储是按顺序存储的,第一个存储的是在第一个位置,第二个存储的值在第2个位置。
另:像字符串、整数等都是不可变序列,不可变序列不能执行增删改,如果要进行增删改则需要重新开辟一块内存空间,然后将变量指向新的内存空间。
三、字典的实现原理
字典的实现原理:
- 字典的实现原理与查字典类似,查字典是先根据部首或拼音查找汉字对应的页码,Python中的字典是根据key查找value所在的位置。
通过字典,查找任何值的步数都是一样的,即先查到key(通过偏旁和笔画,找到值在哪一页),然后定位到值的位置(找到字典对应的页数,即找到了字)
四、字典的创建
1.字典的创建方式:
1.1 最常用的方式:使用花括号{}
举例:
#使用{}创建字典
score={'张三':100,'李四':99,'王五':88}
print(score,type(score))
执行结果如下:
1.2 使用内置函数dict()创建字典
举例:
#使用dict()函数创建字典
student=dict(name='jack',age=20)
print(student,type(student))
执行结果如下:
1.3 创建空字典:
#创建空字典
d={}
print(d,type(d))
执行结果是:
五、字典的常用操作
1. 字典中元素的获取
- 通过[]获取,举例:score['张三']
- 通过get()方法,举例:score.get('张三')
[]取值与使用get()取值的区别:
- []如果字典中不存在指定的key,抛出keyError异常
- get()方法取值,如果字典中不存在指定的key,并不会抛出KeyError而是返回None,可以通过参数设置默认的value,以便指定的key不存在时返回
1.1 通过[]获取举例:
#字典元素的获取,第一种方式使用[]
score={'张三':100,'李四':99,'王五':88}
print(score['张三'])
print(score['陈六']) #不存在时,报KeyError
执行结果为:
1.2 通过get()方法举例:
#字典元素的获取,第二种方式使用get
score={'张三':100,'李四':99,'王五':88}
print(score.get('张三'))
print(score.get('张五'))
print(score.get('赵六',89)) #89是在查找'赵六'所对应的value不存在时,提供的一个默认值
执行结果如下:
2. key的判断
'''key的判断'''
scores={'张三':100,'李四':99,'王五':88}
print('张三' in scores)
print('张三' not in scores)
执行结果如下:
3.字典元素的增删改
3.1 字典元素的删除
#字典元素的删除
scores={'张三':100,'李四':99,'王五':88}
del scores['张三'] #删除指定的key-value对
#scores.clear() #清空字典的元素
print(scores)
执行结果如下:
3.2 字典元素的修改和新增
#新增和修改字典的键值对
scores={'张三':100,'李四':99,'王五':88}
scores['陈六']=100 #新增和修改元素
print(scores)
执行结果如下:
4.获取字典试图的3个方法
4.1 获取所有的key
scores={'张三':100,'李四':99,'王五':88}
keys=scores.keys()
print(keys)
print(type(keys))
print(list(keys)) #将所有的key组成的视图转成列表
执行结果:
4.2 获取所有的value
#获取字典所有的value
scores={'张三':100,'李四':99,'王五':88}
values=scores.values()
print(values)
print(type(values))
print(list(values)) #将获取到的值转换成List
执行结果:
4.3 获取字典所有的key,value键值对
#获取字典所有的key,value键值对
scores={'张三':100,'李四':99,'王五':88}
items=scores.items()
print(items)
print(list(items)) #转换之后的列表元素是由元组组成
执行结果:
5.字典元素的遍历
for item in scores:
print(item)
举例:
#字典元素的遍历
scores={'张三':100,'李四':99,'王五':88}
for item in scores:
print(item,scores[item],scores.get(item))
执行结果:
6. 字典的特点
字典的特点
- 字典中的所有元素都是一个key-value对,key不允许重复,value可以重复
- 字典中的元素是无序的
- 字典中的key必须是不可变对象
- 字典也可以根据需要动态地伸缩
- 字典会浪费较大的内存,是一种使用空间换时间的数据结构
7.字典生成式
内置函数zip()
- 用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表
举例:
#字典生成式
items=['Fruits','Books','Others']
prices=[96,78,65]
lst=zip(items,prices)
print(list(lst))
执行结果:
把上述字典生成式使用如下方式写出报错,代码如下:
items=['Fruits','Books','Others']
prices=[96,78,65]
d={item:price for items,prices in zip(items,prices) }
print(d)
执行结果提示item和price未定义,原因待查