我有几个python脚本,我在字典中存储了5-10百万个字符串键值对,我查询这个字典约5-10百万次。我注意到python dict表现不佳。是否有任何其他实现最适合字符串键。
编辑:
我有两个很大的人名列表,我想匹配它们,所以我把其中一个作为参考列表,尝试对第二个列表中的每个名称应用不同的启发式方法,以确定是否存在于第一个列表中。因此,我必须在第二个列表中为每个名称查询2-3次。希望,这是有道理的。
答案 0 :(得分:1)
哇。哈希图(字典)可能不是是您正在寻找的结构。
不要使用字符串,而是尝试一种可以为您提供良好和快速哈希的表示。或者你真的存储字符串?如果是这样的话,请在上一句中删除“可能”。
您能否详细说明您正在处理的问题?
答案 1 :(得分:1)
问题:这是一个扩展问题吗?当你有两倍的数据时,你是否发现代码的运行速度超过两倍?您是否可能耗尽物理内存并使用交换内存?
1000万个字符串,每个100个字符是一个千兆字节。如果你有2套,那就是2千兆字节,接近32位WinXP进程的限制。
如果您还不知道这个问题的答案,我建议您使用不同大小的数据库(10或2的幂)运行测试,并查看性能曲线是否存在不连续性。
答案 2 :(得分:0)
答案 3 :(得分:0)
PyTables http://www.pytables.org/moin 它用于存储大型数据集。在你的情况下,一个字典=一个表
答案 4 :(得分:0)
从你的描述中听起来你可能会这么做:
set(names1).intersection(set(names2))
右?
无论哪种方式,听起来问题是你的算法很慢,而不是Python的哈希表的实现。
答案 5 :(得分:0)
即使不使用类或方法调用,也要将代码放入函数中并调用该函数。 Python的功能高度优化,部分原因是它比全局变量更快地访问局部变量。
Python维基上的Python Performance Tips文章是关于这个主题的精彩读物。