[英]TypeError: 'collections.defaultdict' object is not callable
[英]'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)
每當我嘗試運行代碼時,它都會返回錯誤:
AttributeError: type object 'collections.defaultdict' has no attribute 'append'
有什么建議么?
為了澄清起見,您的問題是您沒有為.append()設置密鑰
當實例化defaultdict(list)對象時,您正在做的就是告訴類似字典的對象,給定KEY的每個VALUE將是一個列表。
有關更多定義的示例/說明,請參見此處 。
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()
defaultdict
就像常規字典一樣,不同之處在於,當您查找不在字典中的鍵的值時,它會返回默認值而不是引發KeyError
。
看來您正在使用此處找到的代碼段。 該代碼段的初衷是將單詞按首字母分組。 代表字典,字母是鍵,單詞列表是值。 您想將每個單詞附加到字典中與正確的起始字母相對應的條目。
如果您要實現與words.append(word)
者相同的目標,並且想要使用defaultdict
,則一種處理方式是將words.append(word)
替換為words[word[0]].append(word)
,或達到此目的的內容。
如果您不想這樣做,iCodez的答案就是解決之道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.