Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:最佳字典实现_Python_Performance - Fatal编程技术网

Python:最佳字典实现

Python:最佳字典实现,python,performance,Python,Performance,我有一些python脚本,我在一个字典中存储了500-1000万个字符串键值对,我查询这个字典大约500-1000万次。我注意到python dict的性能不是很好。还有其他最适合字符串键的实现吗 编辑: 我有两个大的人名列表,我想匹配它们,所以我将其中一个作为参考列表,并尝试对第二个列表中的每个人名应用不同的启发式方法,以确定第一个列表中是否存在这些人名。所以,我必须为第二个列表中的每个名字查询第一个列表2-3次。希望,这是有道理的。哇。hashmap(dictionary)可能不是您要查找的

我有一些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字典速度很快,并且针对所有键都是字符串的情况进行了优化。你确定“应用不同的启发式”不会占用时间吗?你有没有在字典查找和没有字典查找的情况下进行基准测试?我不知道如何进行基准测试。我使用了一个分析程序,但它只给我在每个方法调用中花费的时间和方法调用的总数,但我的代码只是普通代码,没有任何方法调用。