第六章
6.1 什么是字典
Python内置的数据结构之一,与列表一样是一个可变序列(可以进行增删改操作的就是可变序列)
以键值对的方式存储数据,字典是一个无序的序列。(第一个放进列表中的在第一个位置上第二个放进列表中的在第二个位置上,这样就称列表是有序的;而字典不一定,一个放进字典的不一定在第一个位置上,第二个放进字典不一定在第二个位置上,这样就称字典是无序的)
6.2 字典的原理
-
字典示意图
键值必须是不可变序列,目前学到的不可变序列为str类型或int类型,可变序列是数组或字典 -
字典的实现原理
根据key查找value所在的位置
查找效率比较快,不会随着字典中内容的增加而查找变慢。 -
字典的特点:
- 字典中的所有元素都是key-value对,key不可以重复,value可以重复
- 字典中的元素是无序的
- 字典中的key必须是不可变对象
- 字典可以根据需要动态地伸缩
- 字典会浪费较大的内存,是一种使用空间换时间的数据结构
6.3 字典的创建与删除
- 创建字典
# 使用{}创建字典
scores = {'张三': 100, '李四': 85, '王五': 59}
print(scores, type(scores))
# 使用内置函数dict()创建字典
student = dict(name='Jack', age=20)
print(student, type(student))
# 创建空字典
d = {}
print(d, type(d))
6.4 字典的查询操作
scores = {'张三': 100, '李四': 85, '王五': 59}
# 使用[]查找
print(scores['张三'])
print(scores['陈六']) # KeyError: '陈六'
# 使用get()查找
print(scores.get('张三'))
print(scores.get('陈六')) # None
print(scores.get('麻七', 99)) # 99是查找‘麻七’所对应的value值不存在时提供一个默认返回值
# key的判断
print('张三' in scores)
print('Rose' not in scores)
6.5 字典元素的增、删、改操作
-
字典元素的新增
# 新增键值对 scores = {'张三': 100, '李四': 85, '王五': 59} scores['陈六'] = 80 print(scores)
-
字典元素的删除
# 删除指定键值对 scores = {'张三': 100, '李四': 85, '王五': 59} print(scores) del scores['张三'] print(scores) # 清空字典 scores.clear() print(scores)
-
字典元素的修改
# 修改指定键的值 scores = {'张三': 100, '李四': 85, '王五': 59} scores['王五'] = 70 print(scores)
6.6 字典的视图操作
获取字典视图的三个方法:
- keys() 获取字典中的所有key
- values() 获取字典中的所有value
- items() 获取字典中的所有key,value对
scores = {'张三': 100, '李四': 85, '王五': 59}
keys = scores.keys()
print(keys)
print(type(keys))
print(list(keys)) # 将所有由keys组成的视图转为列表
values = scores.values()
print(values)
print(type(values))
print(list(values)) # 将所有由values组成的视图转为列表
items = scores.items()
print(items)
print(type(items))
print(list(items)) # 转换后的列表元素有元组组成
6.7 字典元素的遍历
scores = {'张三': 100, '李四': 85, '王五': 59}
for item in scores:
print(item,scores[item],scores.get(item))
6.8 字典生成式
内置函数zip():用于将可迭代的对象作为参数,将对象中对应的元素打包成一个元组,然后返回由这些元组组成的列表
items = ['Books', 'Fruits', 'Others']
prices = [45, 100, 70]
d = {item.upper(): price for item, price in zip(items, prices)} #upper()函数将键全部转为为大写
print(d)