Создать список списков и добавить в словарь в течение цикла - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу создать цикл для создания словаря для каждого ключа 5 списков с каждыми тремя значениями. И добавьте редактирование последнего значения списка 2 и 3, основываясь на ключе словаря и индексе списка (таким образом, список 2 и 3).

Я попробовал следующий код, но получаю сообщение об ошибке: «не удается распаковать не повторяемый объект int»

# Create dicitonairy with 6 empty lists
dict_of_lists = dict.fromkeys(range(0,6),[])
for key, value in dict_of_lists:
    # Create 5 lists with the list number as the first value
    for li in range(5):
        dict_of_lists[key] = [li,0,0]
    # Edit the last value of list 1 and 2 (index)
    for wi in [1,2]:
        dict_of_lists[wi][2] = item[wi]*price[key]

Как лучше всего создать следующий вывод:

{
0:[[0,0,0],[1,0,x],[2,0,x],[3,0,0],[4,0,0]]
1:[[0,0,0],[1,0,x],[2,0,x],[3,0,0],[4,0,0]]
2:[[0,0,0],[1,0,x],[2,0,x],[3,0,0],[4,0,0]]
3:[[0,0,0],[1,0,x],[2,0,x],[3,0,0],[4,0,0]]
4:[[0,0,0],[1,0,x],[2,0,x],[3,0,0],[4,0,0]]
5:[[0,0,0],[1,0,x],[2,0,x],[3,0,0],[4,0,0]]
}

Где x - это значение, основанное на списке, в котором оно находится (от 1 до 5), и ключе словаря.

Ответы [ 3 ]

1 голос
/ 19 апреля 2019
dict_of_lists = dict.fromkeys(range(0,6),[])
for key, value in dict_of_lists.items():
    # Create 5 lists with the list number as the first value
    l = []
    for li in range(5):
        if li == 1 or li == 2:
            # l.append([li, 0, li*key]) 
            l.append([li, 0, 'x'])
        else:
            l.append([li,0,0])
    dict_of_lists[key] = l
print (dict_of_lists)

выход:

{0: [[0, 0, 0], [1, 0, 'x'], [2, 0, 'x'], [3, 0, 0], [4, 0, 0]], 
1: [[0, 0, 0], [1, 0, 'x'], [2, 0, 'x'], [3, 0, 0], [4, 0, 0]], 
2: [[0, 0, 0], [1, 0, 'x'], [2, 0, 'x'], [3, 0, 0], [4, 0, 0]], 
3: [[0, 0, 0], [1, 0, 'x'], [2, 0, 'x'], [3, 0, 0], [4, 0, 0]], 
4: [[0, 0, 0], [1, 0, 'x'], [2, 0, 'x'], [3, 0, 0], [4, 0, 0]], 
5: [[0, 0, 0], [1, 0, 'x'], [2, 0, 'x'], [3, 0, 0], [4, 0, 0]]}
1 голос
/ 19 апреля 2019

Для перебора словаря вам нужно использовать dict.items().

В вашем случае:

for key, value in dict_of_lists.items():
    #code
0 голосов
/ 19 апреля 2019

Вы итерируете неверноЕсли вы хотите выполнить итерацию с key и value, указанными внутри цикла (как у вас), вы должны выполнять итерацию по элементам dict, потому что обычная итерация выполняет итерацию по ключам dict.Таким образом, вы должны изменить свою строку на:

for key, value in dict_of_lists.items():

(PS: в последней строке есть неуказанные item и price, я полагаю, вы указали их раньшеэтот блок)

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