用了那么久,殊不知真相是这样?—致所有的python3 学习者

今天,我们来好好聊一聊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()返回的结果类型是什么?
为了解决这个疑惑,小编开始进行各个网站的搜索,最终得出的结果有两种:

  • 以列表返回一个元组(键,值)数组
  • 迭代器

可以思考这样的两个问题?

  1. 如果tels.items()返回的结果是一个列表对象,系统岂不是要分配相应的空间存储tels.items()返回的结果。如果字典tel 本身占用的内存空间很大,那么tels.items()返回的结果也会占用很大的内存空间,这不是在浪费吗?
  2. 如果tels.items()返回的结果是一个迭代器,用最简单的方法可以验证-使用超过两次的循环。测试表明,tels.items()返回的结果可以被多次循环使用,即不是迭代器。

究竟是什么?看看官网是怎样揭露这层面纱的?


python3 官网.png

关于字典视图的介绍和使用.png

翻译成中文,大体可以理解:
tels.items()返回的结果是一种动态视图,当字典中的键值对发生了改变,视图立即随着改变,视图不占用任何的内存空间。

这个视图常用的函数和方法如下:

  • 使用len()函数获取视图的内容长度
  • 使用iter()函数将该视图转化为一个迭代器
  • 使用 in 可以判断该视图中是否存在某个键

现在恍然大悟了吧!同样字典的keys()、values()返回的结果也都是一个视图。

你可能感兴趣的:(用了那么久,殊不知真相是这样?—致所有的python3 学习者)