python内部的数据结构之一,与列表一样,是一个可变序列(可以进行增删改操作)
- 以键值对方式存储数据(一对一对的存在)
- 无序序列
- 字典中储存的元素为键值对,key不可重复,value可重复
- 字典中的key为不可变对象
- 字典会浪费较大内存,是一种用空间换时间的数据结构(查询速度快,但浪费储存空间)
例:scores = { ' 张三 ' : 100 , ' 李四 ' : 80 , ...... }
scores:字典名
‘李四’:键,80:值(冒号之间的称为键,冒号之后的称为值)
每一对数据间用逗号隔开
实现原理
根据key(键)查找value(值)所在的位置(查找时先计算hash(key),这相当于找到索引)
字典的创建与删除
创建(2种方式)
- 使用花括号{}
scores = { ' 张三 ' : 100 , ' 李四 ' : 80 , ...... }
- 使用内置函数dict()
dict ( 张三 = 90 , 李四 = 90 , 王五='空' )
其中,等号左边为键,右边为值,键不加引号,值加不加引号取决于值的类型
空字典:d={}
字典的常用操作
元素的获取
- []
- 使用get()
区别:字典中不含指定的key时,[]抛出错误:KeyError,但get()返回None。
scores={'张三':90,'李四':77,'王五':99}
print(scores['张三'])#90
print(scores.get('张三'))#90
print(scores.get('陈六',101)) #101
#查询的值在字典中不存在,指定返回默认值101,若未指定默认值则返回None
键的判断
判断指定的键在字典中是否存在:使用in 或 not in
scores={'张三':90,'李四':77,'王五':99}
print('张三' in scores)#True 张三在字典中存在
print('张三' not in scores)#False 张三在字典中存在
删除
- 删除指定键值对:
del 字典名[键]
scores={'张三':90,'李四':77,'王五':99}
del scores['王五']
print(scores)#{'张三': 90, '李四': 77}
- 清空字典元素:
字典名 . clear ( )
scores={'张三':90,'李四':77,'王五':99}
scores.clear()
print(scores)#{}
新增和修改
- 新增键值对:
字典名 [ 要新增的键 ] = 值
scores={'张三':90,'李四':77,'王五':99}
scores['陈六']=98 #{'张三': 90, '李四': 77, '王五': 99, '陈六': 98}
print(scores)
- 修改指定键的值:
字典名 [ 要修改的键 ] = 新的值
scores={'张三':90,'李四':77,'王五':99}
scores['李四']=100 #{'张三': 90, '李四': 100, '王五': 99}
print(scores)
视图操作(获取字典视图的操作)
- keys():获取字典中的所有key
- values():获取字典中所有value
- items():获取字典中所有key,value对(键值对)
#视图操作1:获取所有的键
keys=scores.keys()
print(keys,type(keys))
print(list(keys))#将获取的所有key组成的视图转为列表
#视图操作2:获取所有的值
values=scores.values()
print(values,type(values))
print(list(values))#将获取的所有value组成的视图转为列表
#视图操作3:获取所有
scores=scores.items()
print(scores,type(scores))
print(list(scores))#将获取的所有value组成的视图转为列表,转换之后的列表元素为元组
元素的遍历
- 遍历所有的键
for item in scores : #scores:字典 item:字典中的键
print ( item ) #输出的值为字典中的所有键
- 遍历键值对
for item in scores :
print ( item , scores[] ) #输出的值为字典中的所有键,值对
# print( item , scores . get ( item ) )#输出的值为字典中的所有键,值对
for item in scores:
#print(item)
print(item,scores[item],scores.get(item))
字典生成式
- 使用内置函数zip()
语法结构:d={item:value for item,value in zip(item,value)}
其中d为用户指定的字典名
item:key的表达式
value:value的表达式
item.upper():key的表达式都大写
for 后面的item,value为表示key和value的变量
item=['Alice','Bob','John']
value=[33,78,89,200,122]#value比key不相同时,以最小的那个为标准
d={item:value for item,value in zip(item,value)}
print(d)
d={item.upper():value for item,value in zip(item,value)}
print(d)
运行结果: