我有这个代码片段,它找到给定长度为k的最频繁的字符串。
def FrequentWords(Text, k):
patternDict = {}
for i in range((len(Text)-k+1)):
if Text[i:i+k] in patternDict:
patternDict[Text[i:i+k]] += 1
else:
patternDict[Text[i:i+k]] = 1
代码有效,但是,我不明白为什么键和值开始被添加到最初空字典'patternDict'中。我理解patternDict[Text[i:i+k]] = x
查找键Text[i:i+k]
并将x分配给相应的值,但对我而言,该行并不表示必须将任何元素添加到字典中。
为了澄清,我理解代码的作用,它只是行的“添加动作”
patternDict[Text[i:i+k]] = x
我不明白,因为对我而言,这些行中的任何一句话都是“寻找这个关键及其各自的价值。”
答案 0 :(得分:0)
第一行检查密钥是否已经存在,如果它确实增加了值,那么执行else语句,将新密钥添加到dict并将值设置为1,为什么第一行增量是因为你想要计算你在字符串中看到子串/键的次数:
def FrequentWords(Text, k):
patternDict = {}
for i in range((len(Text)-k+1)):
# if keys exists we have seen the substring before so increment its value by 1
if Text[i:i+k] in patternDict:
patternDict[Text[i:i+k]] += 1
# else we have not seen this key before so add it to our dict
else:
patternDict[Text[i:i+k]] = 1
return patternDict
更好的方法是使用collections.defaultdict:
from collections import defaultdict
def frequentWords(text, k):
pattern_dict = defaultdict(int)
for i in range((len(text)-k+1)):
pattern_dict[text[i:i+k]] += 1
return pattern_dict