当您不指定订单时 - 为什么结果订单会有所不同?

When you don't specify an order- why does result order vary?

我正处于 非常 的早期学习阶段 Python。这个问题更多地与基本理解有关,而不是编码 - 希望我正确标记它。我正在阅读我的课程作业,上面写着

"Run the program below that displays the ... The indentation and spacing of the... key-value pairs simply provides more readability. Note that order is not maintained in the dict when printed."

我知道我可以指定每次的顺序都是一样的。我能做到。我想知道当您编写程序时 运行 为什么在未指定时结果以不同的顺序返回?是因为它在处理器中的处理方式吗?

谢谢。

答案与 Python 无关,而与数据结构有关 - 这种行为是普遍的,并且在实现类似数据结构的所有语言中都是预期的。在 Python 中它被称为字典,在其他语言中它被称为 Map 或 Hash Map 或 Hash Table。相同的底层数据结构还有其他一些相似的名称。

Python 字典是一个 Associative 集合,与 Python 列表(它只是一个数组)相反,后者的元素是连续的在记忆中。

字典(关联集合)提供的最大优势是快速且恒定的查找时间 (O(1)) - 数组也提供快速查找,因为计算索引很简单 - 然而字典由键值组成键可以是任何东西,只要它是可散列的。

本质上,要确定 "index" 关联值应该放在关联容器中的什么位置,您需要获取密钥,对其进行哈希处理,设计一些将哈希映射到数字的方法,并将该数字视为指数。尽管两个不同的对象不太可能产生相同的哈希值,但理论上它可能会发生 - 更有可能发生的是你的 hash-to-number procedure maps two unique hashes to the same number - in any case, collisions like this can happen, and there are strategies for handling these collisions.

重点是,键的哈希值决定了关联值在集合中出现的顺序 - 因此,没有固有顺序