Python中的哈希表

时间:2013-04-02 07:48:30

标签: python c dictionary hashtable key-value

目前我在我的程序中使用了5个词典,其中2个词汇具有1300万个键值对。每个Dict是对,其中key是长度为1-6的char值,value是键,值对的另一个dict,Now键长度为1-12,值为元组。

python中的这个解决方案工作正常,但效率不高,每次执行查找大约有80万。在用c写的服务器上的另一个脚本上,这是实时过滤应用程序使用GHashTable并且他的表现非常出色。

我的问题是,如果有任何使用GHashTable的对象或实现,就像我的要求那样,散列函数就是python。 python中的字典使用哈希,但为什么它在重记录中速度慢。与c的GHashTable相比,python字典使用的哈希效率不高。在python中有没有更好的Hash实现。

python dict在几百万条记录中运行良好,但在负载很重的情况下,它无法响应O(1)。

您的Python进程是否适合RAM? 是的我有18GB的Ram,只有8GB用于postgres和其他东西。而10GB可用于处理。

1 个答案:

答案 0 :(得分:0)

当存在哈希冲突时,dict使用__eq__方法解析冲突,按值检查相等性。这似乎是你放缓的原因。

因此,对于某些键a和b,如果hash(a) == hash(b),则我们会通过选中my_dict[a]my_dict[b]来解决冲突。

例如,通过蛮力,我们发现hash(2**1000)等于hash(16777216)。让我们测试一下,

>>> my_dict ={}
>>> my_dict[2**1000] = "One"
>>> my_dict[16777216] = "Two"
>>>
>>>
>>> for k,v in my_dict.items():
...     print(hash(k), v)
... 
16777216 One
16777216 Two