gpt4 book ai didi

python - 搁置真的很慢并且占用大量内存还是我做错了什么?

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:06 27 4
gpt4 key购买 nike

我正在尝试编写一个程序,该程序使用已排序字母的搁置数据库作为键,并使用可以从中创建的单词列表作为值。例如:

db['mnoo'] = ['moon', 'mono']

所以我写了一个函数,它接受一个文件名并将它加载到一个架子上。第一部分,将文件转换为与搁置相同布局的字典工作正常,但搁置部分需要很长时间。

我正在尝试使用包含约 10 万个条目的字典,每个值都是一个列表。每 1000 个条目似乎需要 15-20 秒,每个条目似乎占用 ~1kb 的空间。这是正常的吗?
代码:

def save_to_db(filename, shelve_in='anagram_db'):
dct = anagrams_from_list(process_file(filename))

with shelve.open(shelve_in, 'c') as db:
for key, wordlist in dct.items():
if not key in db:
db[key] = wordlist
else:
db[key].extend(wordlist)

编辑:快速澄清一下:dict 中的每个列表大约 1-3 个单词长,不应该太大

最佳答案

首先——是的,shelve 的默认 pickle 后端速度慢且效率低下,您最好的选择是使用不同的东西。

其次——一旦条目存在就对其进行编辑,而不是在仅将它们序列化一次之前将它们置于内存中的最终状态,这会使情况变得更糟。

dct = anagrams_from_list(process_file(filename))
for key, wordlist in dct.items():
content = {}
for key, wordlist in dct.iteritems():
if not key in content:
content[key] = wordlist
else:
content[key].extend(wordlist)

for k, v in content.iteritems():
db[k] = v

如果您想要一个高效的数据库,我会去别处看看。东京柜、京都柜、SQLite、BDB;选项很多。

关于python - 搁置真的很慢并且占用大量内存还是我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com