为什么/何时将某些元素添加到我的字典中?

时间:2014-12-25 23:01:28

标签: python dictionary

我有这个代码片段,它找到给定长度为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我不明白,因为对我而言,这些行中的任何一句话都是“寻找这个关键及其各自的价值。”

1 个答案:

答案 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