簡體   English   中英

'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)

每當我嘗試運行代碼時,它都會返回錯誤:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM