如何在每行中打开包含多个值的CSV并将其存储在嵌套字典中?

时间:2013-10-04 21:27:12

标签: python csv dictionary

我是python的新手并尝试执行以下操作:

打开一个包含5个不同值的CSV文件,以逗号分隔。

我想将数据存储在一个字典中,该字典的密钥为row[0]

假设有4行,所以有4个主键,对于每个键,我需要创建另一个带有4个新键的嵌套字典,每个键的值为1,2,3和4行。

假设CSV包含:

1,hi,1,2,3
2,yes,2,3,4
3,no,3,4,5
4,why,4,5,6

我需要存储:

dict={'1': { 'key2':hi,'key3':1,'key4':2,'key5':3}, '2':{ }, '3':{}, '4':{} }

这是我正在使用的代码

import csv
dict={}
    reader = csv.reader(open('filename.csv', 'r'))
    for row in reader:
        key=row[0]
        for key in dict:
           dict[key]={}
           dict[key][key2]=row[1]
           dict[key][key3]=row[2]
           dict[key][key4]=row[3]
           dict[key][key5]=row[4]

我错过了什么?

2 个答案:

答案 0 :(得分:2)

您的代码不起作用的原因是因为对于每个row,您正在迭代空字典for key in dict的键,导致不执行任何操作。

相反,如果您想将{'key2': row[1], 'key3': row[2], 'key4': row[3], 'key5': row[4]}插入dict[row[0]],请尝试以下操作。另外,请避免使用以内置类型命名的变量,即listsetalldict

import csv
output_dict = {}
with open('filename.csv', 'r') as f:    
    reader = csv.reader(f)
    for row in reader:
      output_dict[row[0]] = {'key%d' % (i + 1): row[i] for i in xrange(1, 5)}

答案 1 :(得分:0)

以下是执行您要求的代码:

import csv
my_dictionary = {}
reader = csv.reader(open('filename.csv', 'r'))
for row in reader:
    my_dictionary[row[0]] = {}
    for index in range(1, len(row)):
        my_dictionary[row[0]]['key' + str(index)] = row[index]

您应该避免命名字典'dict',因为这是创建字典对象的函数的名称。此外,变量'key'会被迭代器变量覆盖。