2015-09-17 10 views
1

Так что я использую словарь в словаре, и каждый раз, когда я пытаюсь расширить child_dict, который я делаю с помощью цикла, остается только последнее значение итерации, в то время как предыдущие переписанныметоды обновления словаря python для расширения словаря

parent_dict = defaultdict(list) 
     for getdata from datasource: 
      # I generate 'child_dict' here 
      parent_dict[parentDict_key] = child_dict 

Я пытался использовать метод .update (child_dict), но это дает мне

AttributeError: 'list' object has no attribute 'update' 

Я также попытался использовать .append() метод, но он делает родительский список словарей. Есть ли лучший способ добавить новый child_dict в мой родительский_дикт и просто продлить его во время каждой итерации?

+1

_ «осталось только последнее значение итерации, в то время как предыдущие были переписаны». Этого не должно быть. [mcve] пожалуйста. – Kevin

+0

Итак, вы хотите, чтобы элементы были dicts, но вы инициализируете его 'defaultdict (list)', которые делают каждый атрибут по умолчанию 'list' (таким образом, исключение' update'). Что такое 'parentDict_key'? Я не вижу, где он меняется внутри цикла for. – beezz

+0

, пожалуйста, покажите нам, как вы генерируете «child dict» на каждой итерации, вы сначала извлекли его из родительского dict? – zaxliu

ответ

2

Ну, если вы хотите, чтобы ваши ценности быть словари, а не списки, вы должны использовать:

parent_dict = defaultdict(dict) 

вместо:

parent_dict = defaultdict(list) 

, а затем генерировать:

parent_dict[parentDict_key][child_dict_key] = child_dict_value 
+1

Спасибо. Вот почему не удалось использовать метод .update(). – user3591675

Смежные вопросы