2013-10-08 167 views
1

我在python中編寫代碼。 我的輸入行是 「所有/ DT /剩餘VBG所有/ NNS的/ IN」Python字典錯誤:str對象沒有屬性追加

我想創建與一個鍵和多個值 例如詞典 - 所有:[DT,NNS]

groupPairsByKey={} 
Code: 
for line in fileIn: 
    lineLength=len(line) 
    words=line[0:lineLength-1].split(' ') 
    for word in words: 
     wordPair=word.split('/') 
        if wordPair[0] in groupPairsByKey: 
        groupPairsByKey[wordPair[0]].append(wordPair[1]) 
<getting error here> 
        else: 
        groupPairsByKey[wordPair[0]] = [wordPair[1]] 
+0

你能分享你得到的錯誤嗎? – scorpiodawg

+0

'groupPairsByKey'是一個空的字典,或者它已經裝滿了東西? – aIKid

回答

0

你可以這樣做:

my_dict["all"] = my_string.split('/')

在Python

2

雖然看起來像你對我建議立即進行刪除D是得到一個IndentationError,如果你所得到的消息

STR對象沒有屬性追加

那麼就意味着

groupPairsByKey[wordPair[0]] 

str,並str都不具備的一個附加方法。


您發佈的代碼不說明如何

groupPairsByKey[wordPair[0]] 

可以有一個str值。也許把

if wordPair[0] in groupPairsByKey: 
    if isinstance(groupPairsByKey[wordPair[0]], basestring): 
     print('{}: {}'.format(*wordPair)) 
     raise Hell 

到你的代碼,以幫助追查罪魁禍首。


您還可以通過使用簡化代碼collections.defaultdict

import collections 
groupPairsByKey = collections.defaultdict(list) 
for line in fileIn: 
    lineLength=len(line) 
    words=line[0:lineLength-1].split(' ') 
    for word in words: 
     wordPair=word.split('/') 
     groupPairsByKey[wordPair[0]].append(wordPair[1]) 

當您訪問defaultdict與缺少鍵,工廠的功能 - 在這種情況下list - 被稱爲和返回值用作defaultdict中的關聯值。因此,只要遇到缺失密鑰,新的鍵值對就會自動插入到defaultdict中。由於默認值始終是一個列表,因此您不會再遇到錯誤 str object has no attribute append - 除非您有 代碼重新指定舊的鍵值對具有一個新的值,即str

0

你的問題是,groupPairsByKey[wordPair[0]]不是一個列表,而是一個字符串!

在將值附加到groupPairsByKey['all']之前,您需要將該值設置爲列表。

你的解決方案已經是正確的,它對我來說是完美的。儘量確保groupPairsByKey是一個完全空的字典。

順便說一句,這是我的嘗試:

>>> words = "all/DT remaining/VBG all/NNS of/IN".split 
>>> for word in words: 
    wordPair = word.split('/') 
    if wordPair[0] in groupPairsByKey: 
     groupPairsByKey[wordPair[0]].append(wordPair[1]) 
    else: 
     groupPairsByKey[wordPair[0]] = [wordPair[1]] 


>>> groupPairsByKey 
{'of': ['IN'], 'remaining': ['VBG'], 'all': ['DT', 'NNS']} 
>>> 

另外,如果你的代碼格式像你張貼在這裏的人,你會得到一個indentationError。

希望這會有所幫助!

相關問題