'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。
我在尝试使用代码片段时遇到了问题。这是代码:
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。