我一直在尝试创建一个由字典组成的字典,同时从csv文件中导入它们的值。
假设我有3个csv文件,每个文件用于与此类似的不同评级(150,300,600):
6,100
8,150
10,200
对于每个评级,我试图填充相应的字典,如下所示:
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'}}
我在这里做错了什么?有没有办法让这个更优雅,因为它看起来有点难看......?
答案 0 :(得分:2)
将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])并比较差异。那么发生的事情应该是显而易见的