我遇到了一个我尝试使用的代码段问题。这是代码:
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'
有什么建议吗?
答案 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的答案是要走的路。