Добавление списков в качестве значения в словарь в цикле

#python #list #dictionary

Вопрос:

Я хочу создать диктант со значениями списка . вот мой код:

 vo = [6, 5, 4, 4, 1, 0, -2, -2, -2, -2]  
out1 = {}  
A = []  
A.append(vo[0])  
out1[1] = A  
s = 1  
for i in range(1 , len(vo)):

    if  vo[i] == vo[i-1]:
    
        A.append(vo[i])
        out1[s] = A
    
    
                
   else:
    
       s  = len(A)
       A.clear()
       A.append(vo[i])
       out1[s] = A 
 

и вот это результаты :

 {1: [-2, -2, -2, -2], 2: [-2, -2, -2, -2], 3: [-2, -2, -2, -2], 5: [-2, -2, -2, -2], 6: [-2, -2, -2, -2], 7: [-2, -2, -2, -2]}
 

но я хочу этого :

 { 1 : [6] , 2:[5] , 3 : [4 , 4 ] , 5: [1] , 6: [0] , 7 : [-2 , -2 , -2 , -2 ] }
 

как я могу исправить свой пробельм?

Комментарии:

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

Ответ №1:

Проблема в том, что A это список (изменяемый, указатель), и поэтому, когда вы назначаете элемент словаря A , а затем .clear() и изменяете A , он изменяет ранее назначенные элементы словаря, на которые указывают A . Если вы измените строки

 out1[s] = A
 

Для

 out1[s]=A.copy()
 

это должно решить проблему. Это также включало бы первоначальное задание:

 out1[1]=A.copy()
 

Простой пример-если вы выполните следующие действия последовательно

 A=[1]
out={1:A}
A.append(2)
print(out)
 

Вы получите

 {1:[1,2]}
 

Ответ №2:

Я не знаю, почему вы пропустили 4 в своем словаре, но вы можете сделать это так:

 vo = [6, 5, 4, 4, 1, 0, -2, -2, -2, -2]  
out1 = {}

s = 1
out1[s] = [vo[0]]
for i in range(1, len(vo)):
    if vo[i] == vo[i-1]:
        out1[s].append(vo[i])
    else:
        s  = len(out1[s])
        out1[s] = [vo[i]]

print(out1)
 

Выход :
{1: [6], 2: [5], 3: [4, 4], 5: [1], 6: [0], 7: [-2, -2, -2, -2]}