gpt4 book ai didi

python - defaultdict 与 dict 元素初始化

转载 作者:太空狗 更新时间:2023-10-30 01:51:16 24 4
gpt4 key购买 nike

我正在尝试优化一个脚本的性能,该脚本在词典中为给定的每个单词查找相似的单词。

每个唯一的单词将被拆分为字母 n-gram,对于每个 n-gram,词典返回包含相同字母 n-gram 的单词列表。然后将此列表中的每个单词作为键添加到字典中,并将其值递增 1。这给了我一个包含具有相应频率分数的相似词的字典。

word_dict = {}
get = word_dict.get
for letter_n_gram in word:
for entry in lexicon[n_gram]:
word_dict[entry] = get(entry, 0) + 1

此实现有效,但通过将 dict 切换为 collections.defaultdict,脚本应该可以运行得更快。

word_dd = defaultdict(int)
for letter_n_gram in word:
for entry in lexicon[n_gram]:
word_dd[entry] += 1

没有更改其他代码。

我的印象是两个代码片段(最重要的是添加分数)应该以完全相同的方式工作,即如果键存在,则将其值增加 1,如果不存在,则创建键并设置值为 1。

然而,在运行新代码后,一些键的值为 0,我认为这在逻辑上是不可能的。

我对 defaultdict 功能的逻辑或知识是否有缺陷?如果不是,如何将 word_dd 中的任何值设置为 0?

编辑:我也非常确定脚本的其他部分不会扭曲这些结果,因为我在显示代码后立即使用以下方法测试字典:

for item in word_dd.iteritems():
if item[1] == 0:
print "Found zero value element"
break

最佳答案

当您访问 defaultdict 中的键时,如果它不存在,它将自动创建。由于我们将 int 作为默认工厂函数,它会创建 key 并提供默认值 0。

from collections import defaultdict
d = defaultdict(int)
print d["a"]
# 0
print d
# defaultdict(<type 'int'>, {'a': 0})

因此,在访问 key 之前,您应该确保它存在于 defaultdict 实例中,如下所示

print "a" in d
# False

关于python - defaultdict 与 dict 元素初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23044093/

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