Python:最佳字典实现

时间:2011-03-30 07:17:36

标签: python performance

我有几个python脚本,我在字典中存储了5-10百万个字符串键值对,我查询这个字典约5-10百万次。我注意到python dict表现不佳。是否有任何其他实现最适合字符串键。

编辑:

我有两个很大的人名列表,我想匹配它们,所以我把其中一个作为参考列表,尝试对第二个列表中的每个名称应用不同的启发式方法,以确定是否存在于第一个列表中。因此,我必须在第二个列表中为每个名称查询2-3次。希望,这是有道理的。

6 个答案:

答案 0 :(得分:1)

哇。哈希图(字典)可能不是是您正在寻找的结构。

不要使用字符串,而是尝试一种可以为您提供良好和快速哈希的表示。或者你真的存储字符串?如果是这样的话,请在上一句中删除“可能”。

您能否详细说明您正在处理的问题?

答案 1 :(得分:1)

问题:这是一个扩展问题吗?当你有两倍的数据时,你是否发现代码的运行速度超过两倍?您是否可能耗尽物理内存并使用交换内存?

1000万个字符串,每个100个字符是一个千兆字节。如果你有2套,那就是2千兆字节,接近32位WinXP进程的限制。

如果您还不知道这个问题的答案,我建议您使用不同大小的数据库(10或2的幂)运行测试,并查看性能曲线是否存在不连续性。

答案 2 :(得分:0)

正如Santiago Lezica所说,词典不是你要找的结构。

也许你应该尝试Redis:http://redis.io。这是一个先进的键值存储。

有一个用于python here的库。

答案 3 :(得分:0)

PyTables http://www.pytables.org/moin 它用于存储大型数据集。在你的情况下,一个字典=一个表

答案 4 :(得分:0)

从你的描述中听起来你可能会这么做:

set(names1).intersection(set(names2))

右?

无论哪种方式,听起来问题是你的算法很慢,而不是Python的哈希表的实现。

答案 5 :(得分:0)

即使不使用类或方法调用,也要将代码放入函数中并调用该函数。 Python的功能高度优化,部分原因是它比全局变量更快地访问局部变量。

Python维基上的Python Performance Tips文章是关于这个主题的精彩读物。