![](/img/trans.png)
[英]Create nested dictionaries in a for loop without overwriting python
[英]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.