PYTHON不明白为什么for循环在字典中添加值是不起作用的

2024-03-29 14:24:25 发布

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

我有一个文本文件,包括

“不要努力成为一个成功的人,而要努力成为一个有价值的人。 深入观察大自然,你就会更好地理解一切。 智力的真正标志不是知识而是想象力。 我们不能用我们创造问题时的思维来解决问题。 态度的软弱变成性格的软弱。 恋爱不能怪地心引力。 愚蠢和天才的区别在于天才有其局限性。”

我试着将单词作为键放入字典,并将它们所在的行号作为值。你知道吗

这是我的代码,我不知道为什么它不工作

dictionary = dict()
    i = 0
    for line in fp:
        for word in line.lower().split():
            if word in dictionary:
                dictionary[word].append(i)
            else:
                dictionary[word] = i
        i = i + 1

Tags: infordictionary标志line思维天才word
3条回答

以下是更正:

else:
    dictionary[word] = [i]

我认为这里的一般问题是字典键必须是唯一的。。。这个句子中有多少个单词至少重复两次?你知道吗

重复单词列表: (试着,不要,去,成为,一个,人,属于,但是,你,是,我们,弱点,天才)

然后像“can't”这样的词也会被拆分为“can”和“t”(你想不想处理t?)你知道吗

您要求的示例: 有2倍的键:值对关于'try': 1

第一次将单词作为键插入时,其值必须是列表,而不是整数,以便下次找到相同的单词时可以附加到列表中。但不能附加到int

下面是固定代码:

dictionary = dict()
i = 0
for line in fp:
    for word in line.lower().split():
        if word in dictionary:
            dictionary[word].append(i)
        else:
            dictionary[word] = [i]
    i = i + 1

一种更简洁的方法是使用默认值为列表的默认dict。你知道吗

from collections import defaultdict
dictionary = defaultdict(list)
for i,line in enumerate(fp):
    for word in line.lower().split():
            dictionary[word].append(i)

相关问题 更多 >