Python:最佳字典实现
我有一些python脚本,我在一个字典中存储了500-1000万个字符串键值对,我查询这个字典大约500-1000万次。我注意到python dict的性能不是很好。还有其他最适合字符串键的实现吗 编辑: 我有两个大的人名列表,我想匹配它们,所以我将其中一个作为参考列表,并尝试对第二个列表中的每个人名应用不同的启发式方法,以确定第一个列表中是否存在这些人名。所以,我必须为第二个列表中的每个名字查询第一个列表2-3次。希望,这是有道理的。哇。hashmap(dictionary)可能不是您要查找的结构 不要使用字符串,而是尝试一种能够提供良好和快速哈希的表示。或者你真的在存储字符串?如果是这样的话,在上一句中删去“可能”Python:最佳字典实现,python,performance,Python,Performance,我有一些python脚本,我在一个字典中存储了500-1000万个字符串键值对,我查询这个字典大约500-1000万次。我注意到python dict的性能不是很好。还有其他最适合字符串键的实现吗 编辑: 我有两个大的人名列表,我想匹配它们,所以我将其中一个作为参考列表,并尝试对第二个列表中的每个人名应用不同的启发式方法,以确定第一个列表中是否存在这些人名。所以,我必须为第二个列表中的每个名字查询第一个列表2-3次。希望,这是有道理的。哇。hashmap(dictionary)可能不是您要查找的
你能告诉我们你正在解决的问题的细节吗?正如圣地亚哥·莱齐卡所说,字典不是你想要的结构 也许你应该试试Redis:。这是一个高级键值存储 有一个python库。PyTables
它是用来存储大型数据集的。就您的情况而言,一本字典=一张表从您的描述来看,您不妨这样做:
set(names1).intersection(set(names2))
对吧?
不管是哪种方式,问题似乎在于您的算法很慢,而不是Python哈希表的实现。即使不使用类或方法调用,也要将代码放入函数并调用该函数。Python函数的高度优化部分是因为它访问局部变量比访问全局变量更快
PythonWiki上的文章是关于这个主题的很好的读物。问题:这是一个缩放问题吗?当您有两倍多的数据时,您是否发现代码运行速度慢了一倍多?是否可能是物理内存不足而使用交换内存 1000万个100个字符的字符串每一个都是千兆字节。如果你有两套,那就是2G字节,接近32位WinXP进程的极限
如果您还不知道这个问题的答案,我建议您使用不同大小的数据库(10或2的幂)运行一个测试,看看性能曲线是否有不连续性。详细编辑问题您可以使用trie模式而不是普通字典来获得更好的结果,但是,如果没有更多关于您正在做什么的细节,很难说您应该做什么。python中是否有良好的trie实现?数据库没有任何意义。我发现很难相信字典查找是瓶颈。Python字典速度很快,并且针对所有键都是字符串的情况进行了优化。你确定“应用不同的启发式”不会占用时间吗?你有没有在字典查找和没有字典查找的情况下进行基准测试?我不知道如何进行基准测试。我使用了一个分析程序,但它只给我在每个方法调用中花费的时间和方法调用的总数,但我的代码只是普通代码,没有任何方法调用。