2016-05-09 4 views
1

Я использую модуль shelve, и у меня есть некоторые категории, скажем, «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 способ.

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

Btw, вы не должны проверить, если ключ существует, потому что .setdefault() возвращает значение ключа, доступное в словаре, и если данный ключ не доступен, то он возвращает унаследованное значение по умолчанию, которое является пустым списком.

Таким образом, вы можете обновить свой код следующим образом:

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

Команда не добавляемых, но вы можете добавить весь Dict, как показано ниже:

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} 
Смежные вопросы