2014-12-12 2 views
0

Я словарь структурированным как так:Python: Appeneding в словарь списков

'valid_paths' : ['path_one', 'path_two', 'path_three'] 

Я хотел бы добавить новый путь к ключу этого значения. Я огляделся по самому чистому способу сделать это, но придумал.

path_four = 'path_four' 

paths_to_be_added = dict['valid_paths'] 
paths_to_be_added.append(path_four) 
dict['valid_paths'] = paths_to_be_added 

Это прекрасно работает в моих тестовых пробегах. Я написал модульный тест для него, и он терпит неудачу с:

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

И это имеет меня путает, когда я запускаю код моего объекта «paths_to_be_added» имеет атрибут списка, но в тестировании это строка. Что тут происходит?

+1

Вы уверены, что это структура словаря? Кажется, что это на самом деле: '{'valid_paths':" ['path_one', 'path_two', 'path_three'] "}', где значение представляет собой строковое представление списка. – iCodez

+0

О, подумайте, что, возможно, вы правы. Но как будет работать .append изначально, если это была строка, а не список? –

+0

Это не так. 'append' доступен только в списках. Когда вы вызывали его раньше, значение должно было быть списком, а затем вы каким-то образом изменили его на строку. Вам нужно найти, где вы это сделали, и исправить это. – iCodez

ответ

3

Вы можете добавить этот пункт с помощью следующих

dict['valid_paths'].append(path_four) 
+2

Чтобы сделать это еще проще, вы можете сделать оригинальный словарь a ['collections.defaultdict'] (https://docs.python.org/2/library/collections.html#defaultdict-objects), поэтому, если ключ Отсутствие, вы получите хорошее чистое поведение. – Kevin