我有几个python脚本,我在字典中存储5-10万个字符串键值对,我查询这个词典大约5-10百万次。我注意到python字典不是很好。是否还有其他最适合字符串键的实现?Python:最好的词典实现
编辑:
我有人名的两个大名单,我想它们匹配,所以我把其中的一个作为参考列表,并尝试在第二列表中的每名申请不同的启发式弄清楚如果存在于第一个列表中。所以,我必须在第二个列表中为每个名字查询第一个列表2-3次。希望,这是有道理的。
我有几个python脚本,我在字典中存储5-10万个字符串键值对,我查询这个词典大约5-10百万次。我注意到python字典不是很好。是否还有其他最适合字符串键的实现?Python:最好的词典实现
编辑:
我有人名的两个大名单,我想它们匹配,所以我把其中的一个作为参考列表,并尝试在第二列表中的每名申请不同的启发式弄清楚如果存在于第一个列表中。所以,我必须在第二个列表中为每个名字查询第一个列表2-3次。希望,这是有道理的。
哇。哈希映射(字典)可能不是是您正在寻找的结构。
而不是使用字符串,尝试一种表示,可以给你很好和快速散列。或者你真的存储字符串?如果是这样,分析前一句中的“可能”。
您能否介绍一下您正在处理的问题?
编辑了详细的问题 – Boolean 2011-03-30 07:27:33
PyTables http://www.pytables.org/moin 它用于存储大型数据集。在你的情况下,一个字典=一个表
从你的描述,它听起来就像你不妨这样做:
set(names1).intersection(set(names2))
,对吗?
无论哪种方式,这听起来像问题是你的算法很慢,而不是Python的哈希表的实现。
即使不使用类或方法调用,也要将代码放入函数中并调用该函数。 Python的函数高度优化,部分原因是它比全局变量更快地访问局部变量。
在Python维基上的Python Performance Tips文章是关于这个话题的很好的阅读。
问题:这是一个缩放问题吗?当你有两倍的数据时,你是否发现代码运行速度超过两倍?是否有可能耗尽物理内存并使用交换内存?
1000万个字符串,每个100个字符都是千兆字节。如果你有2套那样,这将是2千兆字节,这接近32位WinXP进程的限制。
如果你不已经知道这个问题的答案,我会建议运行测试与各种尺寸的数据库(10次幂或2),看看性能曲线的不连续性。
为什么不使用数据库? – Geo 2011-03-30 07:30:34
数据库没有任何意义。 – Boolean 2011-03-30 07:34:16
我发现很难相信那么字典查找是瓶颈。Python字典速度很快,并且对于所有密钥都是字符串的情况也有优化。你确定时间没有被采用吗?“应用不同的启发式”?你有没有字典查找基准? – Duncan 2011-03-30 07:52:03