首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python字典你必须了解的5件事

字典与list的故事

dict可谓是Python中最重要的数据结构之一,相比list查找元素,在dict中可以直接(相对list线性查找来说)通过元素hash直接就可以获取到目标元素返回, 拿出此之外还有哪些好玩的呢,让我们一起探索

都在说的hash表

提到dict大家都会提到hash表, 提到hash表就会提到两种实现方式开放地址法就是申请一个大段的数组空间,然后通过hash取模计算出元素所在的位置,同时如果发现给定位置元素已经存在就继续探测,直到找到可用位置为止,同时当空间生于超过一定比例之后,重新进行扩容

链表法将元素通过hash取模之后,将元素作为一个元素挂到指定位置后面的链表里面,后续查找的时候,通过线性的二次比对值就可以定位到元素了

Python选用的是开放地址法, 相比开放地址法,链表在每次添加元素的时候,都要新分配一个链表节点,但是可以减少冲散裂带来的冲突,但是同样,如果hash算法不够好,则容易导致退化成线形查找,主要是现在各种资源够用,就相当于拿空间去换时间了

变得有序

在Python2的时候,我们添加元素的时候,字典并不能保证在后续迭代的时候,能按照添加的顺序来迭代,所以那个时候我们还需要使用OrderDict,而如今已大大不同

字典视图

Python2中我们调用keys、values、items都是直接返回一个list对象,而Python3中则返回的是一个视图对象, 这个视图对象有个很重要的特性就是可迭代, 不必一下在内存中产生全部的结果列表,可以逐个迭代

视图对象除了可迭代外,视图对象本身其实持有的是dict元素对象的一个引用,可以实时反应dict元素的数据

还有个小tips: keys()和items()返回的视图对象包含集合操作,而values()不是, 其实很容易就想明白呀, values可能会有重复嘛,哈哈

不见了的has_key

在Python2中,我们还常使用has_key来进行一个字典是否包含某个key的检查,但在python3厘米,已经没了,大家可以用in 来更pythonic

不负如来不负卿

好了一张内容全览,其中修改和读取操作,为分别用了两种颜色去标识两类操作,你有猜到么,欢迎各位pythoner兄弟指指点点, 希望结实更多的Pythoner

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190526A0KY0A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券