簡體   English   中英

在Python中使用for循環創建嵌套字典

[英]Create nested dictionaries with for loop in Python

我一直在嘗試創建由字典組成的字典,同時從csv文件導入其值。

假設我有3個csv文件,每個文件具有不同的等級(150,300,600),類似於:

6,100
8,150
10,200

對於每個Rating,我都試圖填充相應的字典,如下所示:

Rating={150,300,600}
npd = {}
temp={}
flg={}
flg150={}
flg300={}
flg600={}

print(flg)
for k in Rating:
    print(k)
    reader=csv.reader(open(str(k)+'.csv'))
    for x in reader:
        key=x[0]
        temp[key]=x[1]
    print(temp) 
    flg[k]=temp
    print(flg[k])
print(flg)

我想創建一本復合詞典,即

flg = {150:{6:100,8:150,....},300 {6:140,8:160 ...}等,等等}

然后將值分配給單獨的字典:

flg150 = flg.get(150)

問題是,當我運行它時,flg dict的所有鍵最終都具有相同的值。

{}
600
{'8': '210', '6': '160', '10': '260'}
{'8': '210', '6': '160', '10': '260'}
300
{'8': '190', '6': '140', '10': '240'}
{'8': '190', '6': '140', '10': '240'}
150
{'8': '170', '6': '120', '10': '220'}
{'8': '170', '6': '120', '10': '220'}
{600: {'8': '170', '6': '120', '10': '220'}, 300: {'8': '170', '6': '120', '10': '220'}, 150: {'8': '170', '6': '120', '10': '220'}}

我在這里做錯了什么? 並且有一種方法可以使它更加優雅,因為它在我看來有點難看...?

temp = {}移到for循環中,以便在您每次開始讀取新文件時都創建一個新對象。 否則,您只是重用了相同的臨時對象,因此將在每次迭代中保留這些值。

for k in Rating:
    temp={}
    print(k)
    reader=csv.reader(open(str(k)+'.csv'))
    for x in reader:
        key=x[0]
        temp[key]=x[1]
    print(temp) 
    flg[k]=temp
    print(flg[k])
print(flg)

在每次迭代中,您都在更新相同的臨時字典。 對於臨時字典中的鍵值,您正在覆蓋這些值。 對於新的鍵值,您正在添加新項目。 在每種情況下,您都在打印最后寫入的值,因此當然是正確的,但是您將覆蓋舊的條目。 嘗試在循環的末尾使用新代碼和舊代碼打印flg(而不是flg [k]),並比較差異。 那時發生的事情對您應該顯而易見

暫無
暫無

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

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