2016-01-31 2 views
-1

Так что я просто пытаюсь добавить свой список, содержащий набор чисел, в значение в словаре, который в настоящее время является списком.Добавить список в список в словаре в Python

Я не знаю, важно ли это, но некоторые из списков в словаре пусты, а некоторые содержат целые числа.

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

middlenumberdic[y].append(numberlist) 

Однако это дало мне следующую ошибку:

middlenumberdic[y].append(numberlist) 
KeyError: 786 

Так я решил, что проблема заключалась в том, что списки не могли apppend со списками, поэтому я разбил его на отдельные целые

for value in numberlist: 
    middlenumberdic[y].append(value) 

, но это только что дало мне ту же самую вещь KeyError

middlenumberdic[y].append(value) 
KeyError: 792 

С моей точки зрения, я бы подумал, что middlenumberdic[y] вернет [123,456,789] (поскольку это то, что ему назначено), а затем я мог просто добавить к этому списку, но, по-видимому, я не могу.

Прежде чем делать все это, я попробовал middlenumberdic[y] = numberlist, и хотя это не привело к ошибке, все, что было сделано, это перезаписать существующий список, а не добавлять к нему.


После прочтения How to append to a list in a dictionary? и Append to a list within a dictionary я не был до сих пор не мудрее поэтому я отправил это.

Для первого вопроса ответ был таким же, как и решение, которое я использовал, который не работал, и другой вопрос был сложным для меня, чтобы понять.

Это мой первый вопрос, который я задал на этом сайте, поэтому извините, если я сделал что-то неправильно.

P.S Их больше сценария, но я думал, что только это будет neccesary

+0

По-видимому, в словаре 'middlenumberdic' нет записей в словаре' 786' или '792' - что именно содержит' middlenumberdic'? –

+0

Лучше всего, если вы создадите [mcve]. В настоящее время неясно, каковы именно ваши значения входных данных. –

+0

Очень жаль, не мог получить ваш вопрос.Можете ли вы предоставить образец ввода и вывода, чтобы мы могли легко понять? –

ответ

0

Я думаю, что вы пытаетесь получить доступ с помощью ключа, который не существует. Итак, вы получаете это KeyError. В этом случае,

for value in numberlist: 
    middlenumberdic[y].append(value) 

Замените его ниже:

for value in numberlist: 
    middlenumberdic.setdefault(y,[]).append(value) 

Я думаю, что это должно работать.

+0

Спасибо, это сработало отлично. кажется, что я не проиндексировал словарь с пустыми значениями. –

+0

Да, вы правы. «Setdefault (key, [])' is is, если он не мог найти ключ, он инициализирует ключ пустым списком. Только тогда вы можете добавить к нему какое-то значение. –

1

Ваша проблема не с добавляющей частью. Это доступ к вашему списку в словаре. KeyError означает, что нет элементов с индексом 786 или 792.

In [1]: a = dict() 

In [2]: a[5] = [] 

In [3]: a 
Out[3]: {5: []} 

In [4]: a[5] 
Out[4]: [] 

In [5]: a[5].append([3,4,5]) 

In [6]: a 
Out[6]: {5: [[3, 4, 5]]} 
+0

Извините, я не понял, что означало Key Error –

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