为什么/什么时候一些元素被添加到我的字典中?

2024-10-03 06:24:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码片段,它查找给定长度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我不明白的是,因为对我来说,这些行中的任何一行都在说“查找这个键并查看它各自的值”


Tags: 字符串代码textin元素forlenif
1条回答
网友
1楼 · 发布于 2024-10-03 06:24:55

第一行检查键是否已经存在,如果它确实增加值,如果不存在,则执行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

相关问题 更多 >