簡體   English   中英

在循環中將列表作為值添加到字典中

[英]Adding lists as a value to a dictionary in a loop

我想創建一個帶有列表值的字典。 這是我的代碼:

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 ] }

我怎樣才能修復我的問題?

問題是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]}

我不知道你為什么跳過字典中的 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)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM