小编典典

它们是插入顺序[1]。从Python 3.6开始,对于Python的CPython实现,词典会记住插入项目的顺序。这在Python 3.6中被视为实现细节;你需要使用OrderedDict,如果你想多数民众赞成插入排序保证不同的Python的其它实现(与其他有序行为[1] )。

从Python 3.7开始,它不再是实现细节,而是成为一种语言功能。从GvR的py​​thon-dev消息中:

做到这一点。裁定“裁定保留插入顺序”。谢谢!

这只是意味着你可以依靠它。如果其他Python实现希望成为Python 3.7的一致实现,则还必须提供插入顺序字典。

在保留元素顺序的同时,Python 3.6字典实现如何比旧的实现更好的性能[2]?

本质上,通过保留两个数组。

第一个数组,按插入顺序dk_entries保存字典的条目(类型PyDictKeyEntry)。保留顺序是通过仅附加数组来实现的,在该数组中始终在末尾插入新项(插入顺序)。

第二个dk_indices保留dk_entries数组的索引(即,指示中相应条目位置的值dk_entries)。该数组充当哈希表。对键进行哈希处理时,它会导致存储在其中的索引之一,dk_indices并通过indexing获取相应的条目dk_entries。由于只有索引被保留,此数组的类型取决于字典的整体大小(范围从类型int8_t(1字节)到int32_t/ int64_t(4/ 8字节)上32/ 64位构建)

在以前的实现中,必须分配类型PyDictKeyEntry和大小的稀疏数组dk_size。不幸的是,由于性能原因,该数组不允许2/3 * dk_size满载,这也导致了很多空白。(并且空白区域仍具有大小!)。PyDictKeyEntry

现在不是这种情况,因为仅存储了必需的条目(已插入的条目),并且保留了一个稀疏类型的数组intX_t(X取决于dict的大小)2/3 * dk_size。空格从类型更改PyDictKeyEntry为intX_t。

显然,创建一个类型PyDictKeyEntry稀疏的数组比存储ints 的稀疏数组需要更多的内存。

如果有兴趣,可以在Python-Dev上查看有关此功能的完整对话,这是一本好书。

在Raymond Hettinger提出的原始建议中,可以看到使用的数据结构的可视化效果,该可视化体现了该思想的要旨。

例如,字典:

d = {'timmy': 'red', 'barry': 'green', 'guido': 'blue'}

当前存储为[keyhash,key,value]:

entries = [['--', '--', '--'],

[-8522787127447073495, 'barry', 'green'],

['--', '--', '--'],

['--', '--', '--'],

['--', '--', '--'],

[-9092791511155847987, 'timmy', 'red'],

['--', '--', '--'],

[-6480567542315338377, 'guido', 'blue']]

相反,数据应按以下方式组织:

indices = [None, 1, None, None, None, 0, None, 2]

entries = [[-9092791511155847987, 'timmy', 'red'],

[-8522787127447073495, 'barry', 'green'],

[-6480567542315338377, 'guido', 'blue']]

正如你现在可以从视觉上看到的那样,在原始建议中,很多空间实际上是空的,以减少冲突并加快查找速度。使用新方法,可以通过将稀疏移动到真正需要的索引中来减少所需的内存。

2020-02-05

python3.6字典有序_Python-字典是用Python3.6+订购的吗?相关推荐

  1. python字典拷贝_python字典复制

    python学习系列--深拷贝和浅拷贝 概念 普通情况下,复制一个对象是不会新开辟内存空间的,只是把新的对象名称指向原有的内存地址,这种操作其实不是算是拷贝,只是新的引用.把新的对象置于新的内存空间中 ...

  2. python 字典 内存_Python 字典(联合内存、联合数组)

    字典 Python有一个内建数据类型是字典(Dictionaries).字典在某些语言中可能称为"联合内存"("associative memories'')或" ...

  3. python字典数组排序_Python字典数组排序实现

    Python对容器内数据的排序有两种,一种是容器自己的sort函数,一种是内建的sorted函数. sort函数和sorted函数唯一的不同是,sort是在容器内排序,sorted生成一个新的排好序的 ...

  4. python 字典代码_Python 字典(Dictionary)

    Python 字典(Dictionary) 字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包 ...

  5. python 字典程序_Python 字典(Dictionary)操作详解

    Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = { ...

  6. python获取字典长度_python字典操作

    python中字典用于存放具有映射关系的数据 字典中的key不能相同 字典中的key必须为不可变类型,所以可以是数.字符串.元组, 但不能是列表 创建字典 通过{}创建 dict1 = {'eric' ...

  7. [转载] python 字典查找_python字典的增,删,改,查

    参考链接: Python字典clear() 字典---dict 1.字典是无序,可变的数据类型 2.字典:用于存储数据,存储大量数据,字典要比列表快,将数据和数据之间进行关联 定义一个字典: dic ...

  8. python字典成绩_python字典总结

    今天总结一篇关于字典的知识点> 字典也是python提供的一种常用的数据结构,它用于存放具有映射关系的数据 比如成绩表,语文:34,数学:99,如果单纯的使用两个列表保存这组数据,则无法记录两组 ...

  9. python字典解析_python 字典嵌套解析

    python 字典嵌套解析 发布时间:2020-10-31 01:24:05 来源:亿速云 阅读:123 作者:Leah 本篇文章给大家分享的是有关python 字典嵌套解析,小编觉得挺实用的,因此分 ...

  10. python字典拷贝_Python字典(dict)拷贝

    Python字典(dict)拷贝教程 在 字典直接赋值拷贝详解 语法 dic1 = dic 参数 参数 描述 dic 需要赋值字典. dic1 需要被赋值的字典. 说明 将整个字典 dic 赋值给字典 ...

最新文章

  1. html根据文档定位,html文档中的location对象属性理解及常见的用法
  2. 使用单个innodb表,实现锁,防止游戏被刷物品或者其它资源!
  3. c语言中说取消标识符是,2019年全国计算机二级C语言考试考点解析(3)
  4. 直播安装vnc连接树莓
  5. stacking模型融合_算法实践七:模型融合
  6. JS方面重点摘要(一)
  7. linux yum安装python3_在Linux - Centos上安装Python3(上)
  8. mysql大数据高并发处理
  9. 虚幻引擎游戏技能系统文档
  10. android中简单视频播放器demo(附githup下载源码)
  11. 邮件合并保存为一个个单独的文档_巧用WPS“邮件合并”功能,让工作更加高效...
  12. 入门用Python进行Web爬取数据:为数据科学项目提取数据的有效方法
  13. DTL语言学习(一)模板变量和{% if %}标签的使用
  14. Unity的五个窗口面板
  15. 小学算术运算测试程序java_Java实现小学四则运算练习系统(UI)
  16. 董明珠:没有人才,一切归零;没有道德,人才归零
  17. UE4-(雾效)大气雾
  18. 计算机考研838难吗,838初试经验教训分享
  19. 获取当前时间的毫秒时间戳
  20. javaEE开发如何在oracle官网下载安装jdk?(java SE 8u5 JDK 和 Java EE 7 SDK with JDK 7 U45的区别 )

热门文章

  1. 设备坐标与逻辑坐标关系
  2. 视频和视频帧:FFMPEG 硬件解码API介绍
  3. 解决ubuntu(16.04版本)和windows电脑之间无法复制粘贴问题
  4. Ubuntu16.04安装Mininet
  5. Scrapy实例1-爬取天气预报存储到Json
  6. Android NDK开发——人脸检测与静默活体检测
  7. HTML文本错位,DIV+CSS网页错位诊断和解决方法
  8. mybatisplus修改单个属性_Mybatis Plus 中 参数传递的优化之路
  9. uboot的环境变量分析(printenv)
  10. logback的简单使用