python中字典对象实现原理

注:字典类型是Python中最常用的数据类型之一,它是一个键值对的集合,字典通过键来索引,关联到相对的值,理论上它的查询复杂度是 O(1)

字典是Python的一种可变、无序容器数据结构,它的元素以键值对的形式存在,键值唯一,它的特点搜索速度很快:数据量增加10000倍,搜索时间增加不到2倍;当数据量很大的时候,字典的搜索速度要比列表快成百上千倍

Python字典的底层实现是哈希表。什么是哈希表,简单来说就是一张带索引和存储空间的表,对于任意可哈希对象,通过哈希索引的计算公式:hash(hashable)%k(对可哈希对象进行哈希计算,然后对结果进行取余运算),可将该对象映射为0到k-1之间的某个表索引,然后在该索引所对应的空间进行变量的存储/读取等操作

哈希表 (hash tables)

  1. 哈希表(也叫散列表),根据关键值对(Key-value)而直接进行访问的数据结构
  2. 它通过把key和value映射到表中一个位置来访问记录,这种查询速度非常快,更新也快
  3. 而这个映射函数叫做哈希函数,存放值的数组叫做哈希表
  4. 通过把每个对象的关键字k作为自变量,通过一个哈希函数h(k),将k映射到下标h(k)处,并将此对象存储在这个位置

哈希表(Hash Table, 又称为散列表),是一种线性表的存储结构。哈希表由一个直接寻址表和一个哈希函数组成。哈希函数h(k)将元素关键字k作为自变量,返回元素的存储下标

具体操作过程

  1. 数据添加:把key通过哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里
  2. 数据查询:再次使用哈希函数将key转换为对应的数组下标,并定位到数组的位置获取value
  3. {“name”:”zhangsan”,”age”:26} 字典如何存储的呢?
  1. 比如字典{“name”:”zhangsan”,”age”:26},那么他们的字典key为name、age,假如哈希函数h(“name”) = 1、h(“age”)=3,
  2. 那么对应字典的key就会存储在列表对应下标的位置,[None, “zhangsan”, None, 26 ]

解决hash冲突

python字典操作时间复杂度

详细参考这个链接

Python中字典对象实现原理相关推荐

  1. python中字典列表元组_Python中的列表和元组

    python中字典列表元组 Lists and tuples are arguably Python's most versatile, useful data types. You will fin ...

  2. python中字典按键或键值排序

    字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排 ...

  3. python中字典和集合的区别_Python中字典和集合学习小结

    映射类型: 表示一个任意对象的集合,且可以通过另一个几乎是任意键值的集合进行索引 与序列不同,映射是无序的,通过键进行索引 任何不可变对象都可用作字典的键,如字符串.数字.元组等 包含可变对象的列表. ...

  4. python中迭代器的实现原理_Python 进阶应用教程

    Python 中的迭代器实现原理 在数学中,集合表示由一个或多个确定的元素所构成的整体.在 Python 中,列表.元组.集合可以用于表示数学中的集合. 例如,分别使用列表.元组.集合表示了一个包含 ...

  5. python中可以作为定界符_在 Python 中,字典和集合都是用一对 作为定界符,字典的每个元素有两部分组成,即 和 ,其中 不允许重复。_学小易找答案...

    [多选题]路由器A的G0/0/1接口配置信息如下,下列说法正确的有?(多选) acl number 3000 rule 5 deny 17 rule 10 deny 89 rule 15 deny 6 ...

  6. 【Python】Python实战从入门到精通之四 -- 教你使用Python中字典

    本文是Python实战–从入门到精通系列的第四篇文章: Python实战从入门到精通第一讲–Python中的变量和数据类型 Python实战从入门到精通第二讲–Python中列表操作详解 Python ...

  7. python中字典使用_python中字典的使用

    python中的字典的特性: 在字典中的元素是散列存放的,没有顺序, 在进行增删改查的时候使用字典中需要的关键字(key)即可. 一: 创建字典 1)直接定义一个: dict = {'ob1':'co ...

  8. python中字典按键或键值排序_[宜配屋]听图阁

    字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排 ...

  9. python中shelf对象_Python对象持久化存储工具pickle

    Python 中有个序列化过程称为pickle,它能够实现任意对象与文本之间的相互转化,也可以实现任意对象与二进制之间的相互转化.也就是说,pickle 可以实现 Python 对象的存储及恢复. 序 ...

最新文章

  1. java 文件 缓冲区大小_Java web 中文件下载遇到的缓冲大小问题
  2. 无人驾驶还有多久才能全面推开?
  3. ML之LoRSGD:基于LoR(逻辑回归)、SGD梯度下降算法对乳腺癌肿瘤(10+1)进行二分类预测(良/恶性)
  4. java invokeall 阻塞_ExecutorService.invokeAll并关闭
  5. Delta3d角色注册机制
  6. Java学科课程大纲
  7. signal() 和 sigaction()
  8. 计算机视觉实战(七)图像金字塔与轮廓检测
  9. Java并发编程基础(一篇入门)
  10. iWebOffice
  11. 维基百科公式不显示怎么办 找不到latex公式怎么办?
  12. Java微信授权小程序获取用户昵称头像等基本信息
  13. 百度之星资格赛 1003 度度熊与邪恶大魔王 DP 完全背包
  14. 【日常积累】实验室作业Socket实现多个客户端相互通信。
  15. win7开始菜单不见了怎么恢复?
  16. 《2021大数据产业年度创新服务产品》榜重磅发布丨金猿奖
  17. buildroot教程
  18. checked和unchecked的区别
  19. PATA1052 Linked List Sorting (25 分)
  20. 2018android旗舰手机,亓纪的想法 篇五:且用且珍惜:2018年LCD屏幕旗舰手机推荐(上)...

热门文章

  1. 当中国数据中心建设提速,能耗问题引关注
  2. 本地计算机用户改名,win10本地账户管理员怎么改名,详细操作步骤请看本篇
  3. java棋盘问题_0x03大数问题(JAVA解决棋盘覆盖,A+B Problem II)
  4. ML之回归预测:利用十类机器学习算法(线性回归、kNN、SVM、决策树、随机森林、极端随机树、SGD、提升树、LightGBM、XGBoost)对波士顿数据集回归预测(模型评估、推理并导到csv)
  5. AI:2020年6月21日北京智源大会演讲分享之09:20-09:40黄铁军教授《智源进展报告》
  6. ML之回归预测:利用十(xgboost,10-1)种机器学习算法对无人驾驶汽车系统参数(2017年的data,18+2)进行回归预测值VS真实值——bug调试记录
  7. ML之NB:基于NB朴素贝叶斯算法训练20类新闻文本数据集进行多分类预测
  8. Git 提交 .gitignore文件
  9. DDCTF-2018-writeup(5misc)
  10. jmeter脚本结合ant执行测试用例并生成测试报告