我是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]
我错过了什么?
答案 0 :(得分:2)
您的代码不起作用的原因是因为对于每个row
,您正在迭代空字典for key in dict
的键,导致不执行任何操作。
相反,如果您想将{'key2': row[1], 'key3': row[2], 'key4': row[3], 'key5': row[4]}
插入dict[row[0]]
,请尝试以下操作。另外,请避免使用以内置类型命名的变量,即list
,set
,all
,dict
。
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'会被迭代器变量覆盖。