【发布时间】:2013-04-21 20:04:24
【问题描述】:
我发现如果我一开始初始化一个空字典,然后在for循环中向字典中添加元素(大约110,000个键,每个键的值是一个列表,也在循环中增加),速度像 for 循环一样下降。
我怀疑问题是,字典在初始化时不知道键的数量并且它没有做一些非常聪明的事情,所以存储冲突可能变得非常频繁并且速度变慢。
如果我知道键的数量以及这些键的确切含义,python 中是否有任何方法可以使 dict(或哈希表)更有效地工作?依稀记得,如果知道key,就可以巧妙地设计hash函数(完美hash?),提前分配空间。
【问题讨论】:
-
哈希表的性能可以通过删除/减少冲突来提高。这可以通过预先分配最佳数量的桶来实现,或者从一组已知的密钥中创建一个完美的哈希函数。不幸的是,Python 字典无法让您对哈希表的内部进行低级访问,因此您无法以这种方式对其进行微调。
-
这个字典需要多少内存? (你是说列表的大小在增加吗?)可以用pympler 来衡量。如果大小导致 Python 使用交换内存,您可能会看到速度急剧下降。
标签: python performance dictionary hashtable python-internals