Python 语言-第四章典型数据结构之字典
4.3 字典 (dictionary)
4.3.1 认识字典
- 什么是字典
- 由一组键 (key)与之对应的值(value)所构成,键与值之间用冒号分隔,键与值之间的关系一一对应。键的作用相当于索引。
- 特点:
- 可变序列,以 key-value 存储,key 不能重复
- 元素无序
- 因为字典的存放过程会经过哈希算法计算存储位置,所以无法确定其排列顺序
- 可以根据需要动态的伸缩
- 浪费较大内存
- 因为使用哈希算法进行排序,所以不能确定其位置,就造成内存的浪费
- 字典示意图
- 实现原理:key 通过 hash 计算得到 value 的位置,再去读取
4.3.1 创建字典
-
使用花括号:{}
-
最常用
-
语法格式:
字典名={键1:值1[,键2:值2,……,键n:值n]}
- 键是不可变类型,值是可变类型
- 如果花括号内没有任何元素,则会创建一个空字典
-
-
使用
dict()
内置函数dict=dict()
4.3.2 基本操作
4.3.2.1 获取字典中的元素
-
使用:[]
-
语法格式:
字典名[键]
-
例如:
dic['Hello']
-
-
如果键未在字典内,则会发生 KeyError 错误
-
如果字典中键的本身也是字典,则需要使用多个键来访问字典元素
-
如果字典中的键的值是列表或元组,则需要同时使用键和索引来访问字典元素
-
-
使用
get()
方法-
例如:
dic.get('Hello')
-
如果键未在字典内,会返回 None,可以设置默认的 value,以便 key 不存在时返回
-
4.3.2.2 key 的判断
-
检测键是否存在于字典中使用:in 运算符
-
运算符 说明 in 指定的 key 存在于在字典中返回 True not in 指定的 key 不存在于字典中返回 True -
例如:
"Hello" in dict1
4.3.2.3 添加、更新字典元素
-
语法格式:
字典名[键]=值
4.3.2.4 删除字典元素和字典
-
dic.pop(key)
:删除 dic 中的键(keys)并返回相应的值 -
dic.pop(key[,value])
:删除 dic 中的键(keys)并返回对应的值,如果键不在 dic 中,则返回 value (默认为 None ) -
dic.popitem()
:删除一个元素,并返回一个键和值组成的元组 -
del
:-
语法格式:
del 字典[键]
-
4.3.3 获取字典视图
-
获取键(key)
- 使用
keys()
方法
- 使用
-
获取值(value)
- 使用
values()
方法
- 使用
-
获取键值对
- 使用
items()
方法
- 使用
-
可以将获取的字典视图作为参数传入 list() 函数可以获取字典中的所组成的列表
-
例如:获取所有的 key 组成的视图转换为列表
dict1 = {"Hello":"World","我的生命之源":"你"} print(list(dict1.keys()))
['Hello', '我的生命之源']
-
例如:获取所有的 key-value 组成的视图转换为”列表“
dict1 = {"Hello":"World","我的生命之源":"你"} print(list(dict1.items()))
[('Hello', 'World'), ('我的生命之源', '你')]
- 列表中的元素变为了元组
-
4.3.4 字典元素遍历
-
使用 for 循环
-
例如:
dict1 = {'zs':10,'ls':20,'ww':30} for item in dict1: print("遍历的键:{0}\n遍历的值:{1}\n遍历的值:{2}".format(item,dict1[item],dict1.get(item)))
遍历的键:zs 遍历的值:10 遍历的值:10 遍历的键:ls 遍历的值:20 遍历的值:20 遍历的键:ww 遍历的值:30 遍历的值:30
4.3.5 字典生成式
-
跟列表类似:
{ 自定义的键:自定义的值 for 自定义变量 in 可迭代对象}
-
问题实操:如果有两个列表,一个作为键、一个作为值,该怎么转换为字典呢?
- 将两个列表作为参数,将对象的元素打包为一个元组,再进行返回为字典
-
zip()
:用于将可迭代的对象作为参数,将对象的元素打包为一个元组 -
答案:
lst1 = ['hello','时间','地点'] lst2 = ['World','2020年'] dict1 = {item.upper():price for item,price in zip(lst1,lst2)} print(dict1)
{'HELLO': 'World', '时间': '2020年'}
-
解释:
- item.upper:表示字典 key 的表达式
- price:表示字典 value 的表达式
- item 和 price:表示自定义的 key、value 的变量
- zip(lst1,lst2):可迭代对象
4.3.6 其他常用方法
方法 | 描述 |
---|---|
dic.fromkeys(序列,[值]) | 创建一个新字典,并使用序列中的元素作为键,使用初始的值作为所有键对映的初始值(默认为 None ) |
dic.copy() | 用于获取字典的一个副本 |
dic.claer() | 删除 dic 里面的所有元素,使其变为空字典 |
dic.setdefault(key[,value]) | 如果字典中存在键,则返回键对应的值,否则在 dic 中添加 key:value 返回的 value(默认为 None) |
dic.update(dic2) | 将 dic2 中的元素添加到 dic1 里面 |