在Python中使用for循环创建嵌套字典

时间:2014-11-09 10:07:23

标签: python csv dictionary

我一直在尝试创建一个由字典组成的字典,同时从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'}}

我在这里做错了什么?有没有办法让这个更优雅,因为它看起来有点难看......?

1 个答案:

答案 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])并比较差异。那么发生的事情应该是显而易见的

相关问题