字典

未匹配的标注

和列表一样,字典是Python中最灵活的内置数据类型之一。如果认为列表是有序的对象集合,可以认为字典是无序的集合;主要区别在于在字典中,项是按存储和获取的,而非按位置偏移。虽然列表可以起到类似于其它语言中数组的作用,但字典取代了记录,搜索表和任何其它类型的项名称比项位置要更有意义的聚合。

比如,字典能代替许多可能必须在底层语言中手动实现的搜索算法和数据结构——作为一种高度优化的内置类型,索引字典是非常快速的搜索操作。字典有时还可以完成在其它语言中使用的记录,结构和符号表的工作;还能被用来代表稀疏的(大多数是空的)数据结构;等等。下面是它们主要属性的详细报告。Python字典是:

按键访问,不按偏移量位置

字典有时被称为关联数组哈希(特别是被其它脚本语言的用户)。它们通过键联系一组值,所以可以使用原来存储项所在的键,来从字典中获取。使用和列表中同样的索引操作来从字典中获取组件,但索引采用键的形式,而非相对偏移量。

任意对象的无序集合

不像列表,存储在字典中的项不被保存在任何特殊的顺序中;事实上,Python 伪随机化了它们从左到右的顺序来提供快速查找。键提供了字典中项的符号化的(非物理的)位置。

变长的,混杂的,任意嵌套的

像列表一样,字典能就地增缩(没有新拷贝被创建),它们能包含任意类型的对象,且支持嵌套到任意深度(能包含列表、其它字典等等)。每个键只能有一个相关联的值,但如果需要的话,那个值可以是多个对象的一个集合,并且一个给定的值能存储在任意数量的键下。

属于“可变的映射”类别

可以通过给索引赋值来就地修改字典(它们是可变的),但他们不支持适用于字符串和列表的序列操作。因为字典是无序集合,依赖于固定位置顺序的操作(比如:连接,切片)是没有意义的。想法,字典是映射类别(映射键到值的对象)的唯一的内置的核心类型代表。Python中的其它映射是被导入模块创建的。

对象引用表(哈希表)

如果列表是支持按位置访问的对象引用的数组,字典就是支持按键访问的对象引用的无序表格。在内部,字典作为哈希表实现(支持非常快速检索的数据结构),它一开始很小且按需增长。而且,Python使用了优化的哈希算法来找到键,所以检索很快。像列表一样,字典存储对象引用(而不是拷贝,除非明确要求)。

为了参考和再次预览,表8-2总结了一些最常见和有代表性的字典操作,且到3.3开始是相对完整的。然而,和往常一样,请参见库手册或运行 dir(dict)help(dict) 来获取完整列表—— dict 是类型名称。当编码为字面量表达式时,字典被写作一系列的 key:value 对,被逗号分隔,包裹在花括号内[21]。空字典是一套空的花括号,且可以通过简单地在另一个字典、列表或元组中编码一个字典作为值来嵌套字典。

image-20230304144045998image-20230304144133883


Note21

和列表一样,可能不会经常看到字典被编码在完整的字面量中——程序很少在运行前知道自己的所有数据,更典型地是动态地从用户,文件等等提取它。然而,列表和字典是以不同方式增长的。在下一节,将看到:经常通过在运行时给新键赋值来构建字典;这个方法不适用于列表,它通常使用 appendextend 来增长作为代替。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~