Python中字典对象实现原理
python中字典对象实现原理
注:字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1)
字典是Python的一种可变、无序容器数据结构,它的元素以键值对的形式存在,键值唯一,它的特点搜索速度很快:数据量增加10000倍,搜索时间增加不到2倍;当数据量很大的时候,字典的搜索速度要比列表快成百上千倍
Python字典的底层实现是哈希表。什么是哈希表,简单来说就是一张带索引和存储空间的表,对于任意可哈希对象,通过哈希索引的计算公式:hash(hashable)%k(对可哈希对象进行哈希计算,然后对结果进行取余运算),可将该对象映射为0到k-1之间的某个表索引,然后在该索引所对应的空间进行变量的存储/读取等操作
哈希表 (hash tables)
- 哈希表(也叫散列表),根据关键值对(Key-value)而直接进行访问的数据结构
- 它通过把key和value映射到表中一个位置来访问记录,这种查询速度非常快,更新也快
- 而这个映射函数叫做哈希函数,存放值的数组叫做哈希表
- 通过把每个对象的关键字k作为自变量,通过一个哈希函数h(k),将k映射到下标h(k)处,并将此对象存储在这个位置
哈希表(Hash Table, 又称为散列表),是一种线性表的存储结构。哈希表由一个直接寻址表和一个哈希函数组成。哈希函数h(k)将元素关键字k作为自变量,返回元素的存储下标
具体操作过程
- 数据添加:把key通过哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里
- 数据查询:再次使用哈希函数将key转换为对应的数组下标,并定位到数组的位置获取value
- {“name”:”zhangsan”,”age”:26} 字典如何存储的呢?
- 比如字典{“name”:”zhangsan”,”age”:26},那么他们的字典key为name、age,假如哈希函数h(“name”) = 1、h(“age”)=3,
- 那么对应字典的key就会存储在列表对应下标的位置,[None, “zhangsan”, None, 26 ]
解决hash冲突
python字典操作时间复杂度
详细参考这个链接
Python中字典对象实现原理相关推荐
- python中字典列表元组_Python中的列表和元组
python中字典列表元组 Lists and tuples are arguably Python's most versatile, useful data types. You will fin ...
- python中字典按键或键值排序
字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排 ...
- python中字典和集合的区别_Python中字典和集合学习小结
映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...
- python中迭代器的实现原理_Python 进阶应用教程
Python 中的迭代器实现原理 在数学中,集合表示由一个或多个确定的元素所构成的整体.在 Python 中,列表.元组.集合可以用于表示数学中的集合. 例如,分别使用列表.元组.集合表示了一个包含 ...
- python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...
[多选题]路由器A的G0/0/1接口配置信息如下,下列说法正确的有?(多选) acl number 3000 rule 5 deny 17 rule 10 deny 89 rule 15 deny 6 ...
- 【Python】Python实战从入门到精通之四 -- 教你使用Python中字典
本文是Python实战–从入门到精通系列的第四篇文章: Python实战从入门到精通第一讲–Python中的变量和数据类型 Python实战从入门到精通第二讲–Python中列表操作详解 Python ...
- python中字典使用_python中字典的使用
python中的字典的特性: 在字典中的元素是散列存放的,没有顺序, 在进行增删改查的时候使用字典中需要的关键字(key)即可. 一: 创建字典 1)直接定义一个: dict = {'ob1':'co ...
- python中字典按键或键值排序_[宜配屋]听图阁
字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排 ...
- python中shelf对象_Python对象持久化存储工具pickle
Python 中有个序列化过程称为pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化.也就是说,pickle 可以实现 Python 对象的存储及恢复. 序 ...
最新文章
- java 文件 缓冲区大小_Java web 中文件下载遇到的缓冲大小问题
- 无人驾驶还有多久才能全面推开?
- ML之LoRSGD:基于LoR(逻辑回归)、SGD梯度下降算法对乳腺癌肿瘤(10+1)进行二分类预测(良/恶性)
- java invokeall 阻塞_ExecutorService.invokeAll并关闭
- Delta3d角色注册机制
- Java学科课程大纲
- signal() 和 sigaction()
- 计算机视觉实战(七)图像金字塔与轮廓检测
- Java并发编程基础(一篇入门)
- iWebOffice
- 维基百科公式不显示怎么办 找不到latex公式怎么办?
- Java微信授权小程序获取用户昵称头像等基本信息
- 百度之星资格赛 1003 度度熊与邪恶大魔王 DP 完全背包
- 【日常积累】实验室作业Socket实现多个客户端相互通信。
- win7开始菜单不见了怎么恢复?
- 《2021大数据产业年度创新服务产品》榜重磅发布丨金猿奖
- buildroot教程
- checked和unchecked的区别
- PATA1052 Linked List Sorting (25 分)
- 2018android旗舰手机,亓纪的想法 篇五:且用且珍惜:2018年LCD屏幕旗舰手机推荐(上)...
热门文章
- 当中国数据中心建设提速,能耗问题引关注
- 本地计算机用户改名,win10本地账户管理员怎么改名,详细操作步骤请看本篇
- java棋盘问题_0x03大数问题(JAVA解决棋盘覆盖,A+B Problem II)
- ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)
- AI:2020年6月21日北京智源大会演讲分享之09:20-09:40黄铁军教授《智源进展报告》
- ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录
- ML之NB:基于NB朴素贝叶斯算法训练20类新闻文本数据集进行多分类预测
- Git 提交 .gitignore文件
- DDCTF-2018-writeup(5misc)
- jmeter脚本结合ant执行测试用例并生成测试报告