python字典添加元素_图说Python之字典你必须知道的五件事

原标题:图说Python之字典你必须知道的五件事

字典与list的故事

b4a169084a6e4a598c983bfacf1e6460.png

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

都在说的hash表

提到dict大家都会提到hash表, 提到hash表就会提到两种实现方式

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

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

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

变得有序

3e1ec73010d84834aa75ab18036f3aa6.jpeg

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

字典视图

43806adcd1df46379ecf0b4f38efaf3a.png

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

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

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

不见了的has_key

144841cfcce24699b70c71274683123a.jpeg

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

不负如来不负卿

b634b2b767544d6ba8b240b99f506650.png

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

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值