我想创建一个包含列表值的字典。 这是我的代码:
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 ] }
如何修复我的问题?
答案 0 :(得分:0)
问题在于 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]}
答案 1 :(得分:0)
我不知道你为什么跳过字典中的 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]}