目录
1.什么是字典
- 字典是python内置的的数据之一,与列表一样是一个可变序列(可变序列就是列表能执行增删改的操作)。
- 以键值对的方式存储数据,字典是一个无序的序列,列表是一个有序序列。
- 用{}来定义字典
key1,key2.....代表的是第几个放入字典当中的键,可以看出第一个放入字典的键并不是第一个,因为这里存在一个hash()函数的工序,利用这个函数,计算存储位置。所以放入字典中的键必须是一个不可变序列。例如:字符串,整数序列就是不可变序列,字典,列表都是可变序列。
2.字典的原理
字典的实现原理:python中的字典是根据Key查找value所在的位置。
3.字典的创建与删除
最常用的方式:使用{},scores= {'张三':100,'李四':98,'王五':45}
使用内置函数:dict(name='jack',age=20)
'字典的创建方式'
# 使用{}创建字典
scores = {'张三': 100, '李四': 98, '王五': 45}
print(scores, type(scores))
# 使用内置函数dict()
student = dict(name='jack', age=20)
print(student, type(student))
# 空字典
d = {}
4.字典的查询操作
获取字典中的值第一种方式就是使用[ ],第二种就是使用get()方法。二者的区别是如果查找的键不存在,第一种会报错,第二种报None
scores = {'张三': 100, '李四': 98, '王五': 45}
'获取字典中的元素'
# 使用 []
print(scores['张三']) # 100
# print(scores['陈六']) # KeyError: '陈六'
# 使用get()方法
print(scores.get('张三')) # 100
# print(scores.get('陈六')) # None
print(scores.get('麻七', 99)) # 99 这里输出99是因为查找的时候Value不存在时,提供的一个默认值
5.字典的增、删、改操作
key的判断
scores = {'张三': 100, '李四': 98, '王五': 45}
'键的判断'
print('张三' in scores) # True
print('张三' not in scores) # False
"======================================================"
scores = {'张三': 100, '李四': 98, '王五': 45}
del scores['张三'] # 删除指定的键值对
print(scores)
# {'李四': 98, '王五': 45}
scores.clear() # 清空字典内的所有元素
print(scores)
# {}
"======================================================"
scores = {'张三': 100, '李四': 98, '王五': 45}
scores["陈六"] = 98 # 字典元素的添加
print(scores)
# {'张三': 100, '李四': 98, '王五': 45, '陈六': 98}
scores["陈六"] = 105 # 修改键值对的值
print(scores)
# {'张三': 100, '李四': 98, '王五': 45, '陈六': 105}
获取字典视图的三个方法
keys():获取字典中的所有key
values():获取字典中的所有value对
items():获取字典中的所有key,value对
scores = {'张三': 100, '李四': 98, '王五': 45}
scores.keys() # 获取所有的key
print(scores.keys(), type(scores.keys()))
# dict_keys(['张三', '李四', '王五']) <class 'dict_keys'>
print(list(scores.keys())) # 将所有的key组成的试图转换为列表
# ['张三', '李四', '王五']
scores.values() # 获取所有的values
print(scores.values(), type(scores.values()))
# dict_values([100, 98, 45]) <class 'dict_values'>
print(list(scores.values())) # 将所有的value组成的试图转换为列表
# [100, 98, 45]
scores.items() # 获取所有的keys,values(键值对)
print(scores.items())
# dict_items([('张三', 100), ('李四', 98), ('王五', 45)])
print(list(scores.items())) # 转换之后的list类型为元组
# [('张三', 100), ('李四', 98), ('王五', 45)] # 元组
6.字典的推导式
字典元素的遍历
scores = {'张三': 100, '李四': 98, '王五': 45}
for item in scores: # 遍历的字典元素所有的键
print(item, end='\t')
# 遍历的字典元素所有的值
for item in scores:
print(scores[item], scores.get(item))
for item in scores.values():
print(item)
字典的生成式
使用内置函数zip(),用于将可迭代的对象作为参数,将对象中相应的元素打包成一个元组,然后返回由这些元组组成的列表。
item = ['张三', '李四', '王五']
lst = [100, 200, 300, 400, 500]
scores1 = zip(item, lst)
print(list(scores1)) # 生成的是元组组成的列表
scores1 = zip(item, lst)
print(dict(scores1)) # 生成的是字典
scores = {item: lst for item, lst in zip(item, lst)} # 在进行打包时,会以元素少的那部分为基准而生成
print(scores)
7.字典的特点
- 字典的所有元素都是一个key-value对,key不允许重复,value可以重复
- 字典的元素是无序的
- 字典的key必须是不可变对象
- 字典也可以根据需要动态伸缩
- 字典会浪费较大的内存,是一种空间换时间的数据结构
scores = {'张三': 100, '李四': 98, '王五': 45, "张三": 500, "新张三": 100}
print(scores) # 键不允许重复,重复的话会出现值覆盖的情况,value是可以重复的
# {'张三': 500, '李四': 98, '王五': 45, '新张三': 100}