今天,我们来好好聊一聊python3中的字典?
在写这片文章之前,我先默认大家都是有python基础的。话不多说,直接切入正题。
python3 强大之处之一在于其自带的数据结构类型,例如序列(列表list、元组tuple)、映射(字典)。字典中的元素都是以「键值对」的形式存在,当我们对字典进行遍历时,通常使用字典的keys()、values()、items() 方法。
案例如下:
现有一个字典tels,以姓名为键,以手机号为值。如果需要遍历字典中所有的姓名和手机号,自然少不了字典的items()方法。
tels = {''李浩":"17356472378","王键":"15567823456","赵敏":"15678652332"}
for name,tel in tels.items():
print(name,tel)
输出结果:
李浩 17356472378
王键 15567823456
赵敏 15678652332
问题来了,tels.items()返回的结果类型是什么?
为了解决这个疑惑,小编开始进行各个网站的搜索,最终得出的结果有两种:
- 以列表返回一个元组(键,值)数组;
- 迭代器
可以思考这样的两个问题?
- 如果tels.items()返回的结果是一个列表对象,系统岂不是要分配相应的空间存储tels.items()返回的结果。如果字典tel 本身占用的内存空间很大,那么tels.items()返回的结果也会占用很大的内存空间,这不是在浪费吗?
- 如果tels.items()返回的结果是一个迭代器,用最简单的方法可以验证-使用超过两次的循环。测试表明,tels.items()返回的结果可以被多次循环使用,即不是迭代器。
究竟是什么?看看官网是怎样揭露这层面纱的?
翻译成中文,大体可以理解:
tels.items()返回的结果是一种动态视图,当字典中的键值对发生了改变,视图立即随着改变,视图不占用任何的内存空间。
这个视图常用的函数和方法如下:
- 使用len()函数获取视图的内容长度
- 使用iter()函数将该视图转化为一个迭代器
- 使用 in 可以判断该视图中是否存在某个键
现在恍然大悟了吧!同样字典的keys()、values()返回的结果也都是一个视图。