2016-05-09 207 views
1

我使用擱置模塊和我有一些類讓我們說「A」,B「C」,我有一些文章屬於那些我想提出一個字典關鍵類別爲文章名稱值任何數量和貨架模塊,當我追加它說:Python的追加字典詞典中值

AttributeError: 'dict' object has no attribute 'append'

這裏是我的代碼

indexDb = shelve.open('index.db') 
if indexDb.has_key(linko.text.encode('UTF-8')): 
    indexDb.setdefault(linko.text.encode('UTF-8'),{}).append(allArticle) 
else: 
    indexDb[linko.text.encode('UTF-8')] = allArticle 
+0

什麼是錯誤信息? – ozgur

+0

AttributeError:'dict'對象沒有屬性'append' – Polymorphism

+0

這是因爲你沒有附加到字典。沒有'append()'方法。一本字典是無序的,所以「追加」的整個想法都忽略了字典的重點。這不是一個列表。如果你想添加一個鍵然後只分配它。 – cdarke

回答

1

你應該改變{}[],並.append().extend()調用setdefault米時ethod。

indexDb.setdefault(linko.text.encode('UTF-8'), []).extend(allArticle) 

順便說一句,你沒有檢查是否存在關鍵,因爲.setdefault()返回字典可用的關鍵值,如果給定的密鑰不可用,它將返回提供的缺省值是空列表。

因此,你可能需要更新您的代碼如下:

indexDb = shelve.open('index.db') 
indexDb.setdefault(linko.text.encode('UTF-8'), []).extend(allArticle) 
0

該命令沒有追加,但您可以添加如下整個字典:

dict1 = {'a':1, 'b':2} 
dict2 = {'c':3, 'd':4} 
dict3 = dict1.append(dict2) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'dict' object has no attribute 'append' 
dict1['dict2'] = dict2 
dict1 
{'a': 1, 'b': 2, 'dict2': {'c': 3, 'd': 4}} 

也許你的意思是說你想添加從dict2到dict1的每個鍵。在這種情況下,命令將是,

for key in dict2: 
    dict1[key] = dict2[key] 

dict1 
{'a': 1, 'c': 3, 'b': 2, 'd': 4}