'collections.defaultdict' 对象没有属性 'append'

'collections.defaultdict' object has no attribute 'append'

我在尝试使用代码片段时遇到了问题。这是代码:

from collections import defaultdict
from string import ascii_lowercase
words = defaultdict(list)
with open('/usr/share/dict/words') as fin:
    for word in fin:
        if len(word) == 5: 
             words.append(word)

每当我尝试运行代码时 returns 错误:

AttributeError: type object 'collections.defaultdict' has no attribute 'append'

有什么建议吗?

collections.defaultdict是一种字典;它没有 append 方法。这仅适用于 list 类型。

看看你的代码,你没有理由使用类似字典的结构。您的目标是收集单个物品,而不是 key/value 对。 words 应该只是一个列表:

words = []
with open('/usr/share/dict/words') as fin:
    for word in fin:
        if len(word) == 5: 
            words.append(word)

此外,您可能想在每一行上调用 str.rstrip() 以删除结尾的换行符:

for word in fin:
    word = word.rstrip()

A defaultdict 就像一个普通的字典,不同的是,当你查找一个不在字典中的键的值时,它 returns 一个默认值而不是引发一个KeyError.

您似乎在使用找到的代码片段 here。该片段的初衷是按单词的第一个字母对单词进行分组。表示为字典,字母表中的字母将是键,单词列表将是值。您想要将每个单词附加到字典中对应于正确起始字母的条目。

如果你想达到与那个提问者相同的 objective,并且你想为此使用 defaultdict,一种方法是替换 words.append(word)words[word[0]].append(word) 或类似的东西。

如果您不想做同样的事情,iCodez 的回答就是正确的选择。

澄清一下,您的问题是您没有为 .append()

设置密钥

当您实例化 defaultdict(list) 对象时,您正在做的是告诉类似字典的对象,给定 KEY 的每个 VALUE 都是一个列表。

有关更明确的示例/解释,请参阅 here