' collections.defaultdict'对象没有属性'追加'

时间:2015-01-06 01:49:15

标签: python dictionary

我遇到了一个我尝试使用的代码段问题。这是代码:

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)

每当我尝试运行代码时,它都会返回错误:

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

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

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

设置密钥

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

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

答案 1 :(得分:1)

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

查看您的代码,您没有理由使用类似字典的结构。您的目标是收集单个项目,而不是键/值对。 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()

答案 2 :(得分:-1)

defaultdict就像一个普通的字典,除了当你查找一个不在字典中的键的值时,它会返回一个默认值,而不是引发KeyError

您似乎正在使用找到here的代码段。该片段的最初意图是按照第一个字母对单词进行分组。以字典表示,字母表中的字母将是键,而单词列表将是值。您希望将每个单词附加到字典中与正确的起始字母对应的条目。

如果您尝试实现与提问者相同的目标,并且您希望使用defaultdict,则一种方法是将words.append(word)替换为words[word[0]].append(word)或者那种效果。

如果你不想这样做,iCodez的答案是要走的路。