gpt4 book ai didi

python - 更新字典和检查键的最快方法

转载 作者:行者123 更新时间:2023-11-28 19:34:31 25 4
gpt4 key购买 nike

我正在构建一个非常长的字符串(~1G)的字典,其中key是一个固定长度的k-mer,value是所有出现的位置。当 k 很大(>9)时,预先构建 k-mer 字典是没有意义的,因为并非所有值都会出现并且它会使表膨胀。

目前我正在做这样的任务:

def hash_string(st, mersize):

stsize = len(st)
hash = {}
r = stsize-mersize+1

for i in range(0, r):
mer = st[i:i+mersize]
if mer in hash:
hash[mer].append(i)
else:
hash[mer] = [i]

return hash

# test for function hash_st above
mer3 = hash_string("ABCDABBBBBAAACCCCABCDDDD", 3)

最耗时的步骤(我执行了 cProfile)是查找遇到的键(当我们沿着字符串移动时)是一个新键,还是它已经存在。最快的方法是什么?

(我目前正在测试避免此步骤的两次通过策略(这对于大型序列来说要快得多),我首先通过简单地覆盖 double 来构建键列表。然后我不这样做必须检查 key 是否存在——我用这些 key 为我的字典播种,然后在第二遍中遇到它们时简单地添加。)

但我仍然有兴趣知道,总而言之,在 Python 中查找字典键的最快方法,因为这是一种常见模式:

如果键存在,追加新条目,否则,创建键并添加第一个元素。

这种模式的最快实现方式是什么?

最佳答案

我会使用 collections.defaultdict :

import collections
...
hash = collections.defaultdict(list)
r = stsize-mersize+1

for i in range(0, r):
mer = st[i:i+mersize]
hash[mer].append(i)

尽管从未对它与 if ... else 进行对比分析。

关于python - 更新字典和检查键的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5654006/

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