为什么我无法通过索引获取字典键?

Mod*_*art 5 python dictionary python-3.x

从 Python 3.7开始,字典是有序的。那么为什么我不能通过索引获取键呢?

Tim*_*ers 6

构建这样的 API 将是一个“有吸引力的麻烦”:实现无法有效地支持它,因此最好不要诱使人们使用不适当的数据结构。

出于同样的原因,例如,链表很少提供索引 API。这也是完全有序的,但是没有有效的方法来找到i任意 的第 'th 元素i。您必须从头开始,依次点击i链接才能找到i“th”。

CPython 字典的最终结果相同。它不使用链表,但最终还是一样的:它在幕后使用平面向量,但基本上任何数量的向量条目都可以是“洞”。除非一次一个地查看每个条目,否则无法跳过漏洞。人们期望a[i]花费O(1)(恒定的)时间,而不是O(i)时间。

  • 虽然“collections.OrderedDict”和内置“dict”都是有序的,但它们的实现却非常不同。内置“dict”所做的事情更适合其 C 实现。`OrderedDict` 实际上确实使用链表来记住顺序;内置的“dict”实现要微妙得多。但无论哪种情况,找到第 i 个键(或值)都需要 O(i) 时间。 (3认同)