PYTHON不明白为什么将值追加到字典中的for循环是';行不通

PYTHON不明白为什么将值追加到字典中的for循环是';行不通,python,dictionary,Python,Dictionary,我有一个文本文件,其中包括 “不要试图成为一个成功的人,而要努力成为一个有价值的人。 深入观察大自然,你就会更好地理解一切。 智力的真正标志不是知识,而是想象力。 我们不能用我们创造问题时的思维方式来解决问题。 态度的软弱变成性格的软弱。 你不能因为坠入爱河而责怪地心引力。 愚蠢与天才的区别在于天才有其局限性。” 我试图将单词作为键放入字典,并将它们的行号作为值 这是我的代码,我不知道为什么它不起作用 dictionary = dict() i = 0 for line in f

我有一个文本文件,其中包括

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

我试图将单词作为键放入字典,并将它们的行号作为值

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

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

以下是更正:

else:
    dictionary[word] = [i]

以下是更正:

else:
    dictionary[word] = [i]

我认为这里的一般问题是字典键必须是唯一的。。。这个句子中有多少个单词至少重复了2次

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

然后像“不能”这样的词也会被拆分为“可以”和“t”(你想不想处理t?)

您要求的示例:
拥有2个key:value对的
'try':1

我认为这里的一般问题是字典键必须是唯一的。。。这个句子中有多少个单词至少重复了2次

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

然后像“不能”这样的词也会被拆分为“可以”和“t”(你想不想处理t?)

您要求的示例:
具有2x key:value对的
“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)

第一次将单词作为键插入时,其值必须是列表,而不是整数,以便下次找到相同的单词时可以附加到列表中。但不能附加到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)

“它不工作”是什么意思?一旦您将
dictionary[word]
设置为
i
,一个整数,您希望
dictionary[word].append()
下次遇到该单词时做什么?错误是“'int'对象没有属性'append'”您需要确保字典中条目的值是数组。@拉萨德数组和列表是不同的东西。OP想要一个列表。“它不起作用”是什么意思?一旦您将
dictionary[word]
设置为
i
,一个整数,您希望
dictionary[word].append()
下次遇到该单词时做什么?错误是“'int'对象没有属性'append'”您需要确保字典中条目的值是数组。@拉萨德数组和列表是不同的东西。OP想要一份清单,请解释一下。OP显然不太理解列表。请解释一下。OP显然不太理解列表,这很有道理。谢谢这很有道理。谢谢