Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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_Dictionary_Shelve - Fatal编程技术网

Python 检查搁置中是否存在密钥的最快方法

Python 检查搁置中是否存在密钥的最快方法,python,dictionary,shelve,Python,Dictionary,Shelve,我使用python shelve库预先存储了一个键向量对列表。总共有300万个条目,需要6 GB的内存存储。 在一个单独的培训文件中,我需要检查每个记录是否是shelve dictionary中的键。这使得我的程序运行极其缓慢。有没有一种快速的方法来检查搁置中是否存在密钥?或者是否有其他有效的方法在python中存储键向量对,以便有效地检查键是否存在?使用而不是搁置,并且您可以查询不只是请求任意键的内容。还要注意的是,shelve并没有承诺该数据库可以在任何其他Python版本、平台或任何其他平

我使用python shelve库预先存储了一个键向量对列表。总共有300万个条目,需要6 GB的内存存储。 在一个单独的培训文件中,我需要检查每个记录是否是shelve dictionary中的键。这使得我的程序运行极其缓慢。有没有一种快速的方法来检查搁置中是否存在密钥?或者是否有其他有效的方法在python中存储键向量对,以便有效地检查键是否存在?

使用而不是搁置,并且您可以查询不只是请求任意键的内容。还要注意的是,
shelve
并没有承诺该数据库可以在任何其他Python版本、平台或任何其他平台上使用


更好的方法是,使用
sqlite3
分别存储所有键(使用unique),并通过向量表中的外键引用这些键;您可以将密钥列表作为
集扫描并保存在内存中(只需说~40 MiB+3 M*RAM的平均密钥大小)。

最好的方法是移动到更高效的k/v存储(如redis)甚至数据库(取决于您想做什么).当我只需要为每个键保存一个值并快速获取它时,sqlite3是否更快?