dict总是python中存储哈希的最有效的方法吗?

dict总是python中存储哈希的最有效的方法吗?,python,data-structures,hashmap,Python,Data Structures,Hashmap,在许多语言中,哈希映射/关联数组有许多不同的实现,每种实现都适合于不同的任务。据我所知,在Python中只有dict 所以我想我想知道的是,有没有什么应用程序需要定制数据结构?或者它总是比使用Python内置的数据结构慢吗?这可能应该在注释中,但太长了 Python字典的实现如下所示。哈希表对于平均检索项(O(1))是很好的。如果它们一般都很好,那么当发生大量碰撞时,它们的性能就会下降。冲突是指两个不同键的计算哈希相同。所以在最坏的情况下,也就是说,如果所有的键都有相同的散列,那么它们的搜索操作

在许多语言中,哈希映射/关联数组有许多不同的实现,每种实现都适合于不同的任务。据我所知,在Python中只有dict


所以我想我想知道的是,有没有什么应用程序需要定制数据结构?或者它总是比使用Python内置的数据结构慢吗?

这可能应该在注释中,但太长了

Python字典的实现如下所示。哈希表对于平均检索项(O(1))是很好的。如果它们一般都很好,那么当发生大量碰撞时,它们的性能就会下降。冲突是指两个不同键的计算哈希相同。所以在最坏的情况下,也就是说,如果所有的键都有相同的散列,那么它们的搜索操作的复杂度是O(n)——这相当于线性搜索

但是可以通过使用其他几种数据结构来实现。值得注意的是(不太好:平均为O(logn),最差为O(n)或(更好:平均为O(logn),最差为O)。AFAIK标准Python库不提供任何这些。通过谷歌搜索,它似乎有各种各样的实现


这就引出了您问题的核心:“是否有任何应用程序需要定制数据结构?或者它总是比使用Python内置的数据结构慢?”。就我自己而言,我认为这些数据结构的任何纯Python实现都可能会慢慢地成为本地Python字典。如果你有非常特殊的需求,你可以考虑在C级上实现这些需求。但是如果你有这样的限制,也许Python一开始并不是最好的选择。

看看dictobject.c——它投入了多少思考、数学和基准测试,真是不可思议。同时,如果你在Python中实现它,你会开始以至少10倍的速度减慢,可能高达100X。你可能想看看这个强大的DICT。“在很多语言中,哈希映射/关联数组有很多不同的实现方式,每个都适用于不同的任务。”我一定累了。但是你能提供一些主流脚本语言中可用的“不同实现”的例子吗?@JordanReiter注意,这个接口是由一些类实现的,这些类根本不是独立的实现,而只是围绕
HashTable
(哪一个可以也确实用Python创建):属性、AuthProvider、PrinterStateReasions、属性、Provider、RenderingHits、SimpleBindings、TablerDataSupport、UIDefaults。其他实现在Python中也有类似的功能:
WeakHashMap
is
weakred.WeakKeyDictionary
LinkedHashMap
is
collections.OrderedDict
。还有一些truly不同的实现,Scala有更多的例子。@JordanReiter另外,其中两个实现不是哈希表,而是二进制搜索树,这需要一个更通用的接口(SortedMap)。包括这些是有争议的(虽然不是完全错误的)-这是另一回事,但无法用哈希表替换的用例非常罕见且狭窄,Python根本没有二进制搜索树(在标准库中)。