PYTHON困惑于为什么循环将值附加到字典中是不行的

时间:2017-04-09 22:18:53

标签: python dictionary

我有一个包含

的文本文件

"尽量不要成为一个成功的人,而是努力成为一个有价值的人。 深入了解自然,然后你会更好地理解一切。 智力的真正标志不是知识,而是想象力。 我们不能用我们在创建它们时使用的相同思维来解决我们的问题。 态度的弱点成为品格的弱点。 你不能因为坠入爱情而责怪引力。 愚蠢和天才之间的区别在于天才有其局限性。"

我正在尝试将单词作为键放入字典中,并使用它们所在的行号来表示值。

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

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

3 个答案:

答案 0 :(得分:1)

这是更正:

else:
    dictionary[word] = [i]

答案 1 :(得分: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)

答案 2 :(得分:0)

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

重复单词列表: (尝试,不是,成为,成为,成为,男人,但是,而且,你,我们,是,我们,弱点,天才)

然后还有像"可以'#34;将分为" can"和" t" (你想不处理?)

您要求的示例: 拥有2x密钥:'try': 1

的值对