0

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

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

我想将数据存储在字典中,哪个键是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]

我错过了什么?

4

2 回答 2

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)}
于 2013-10-04T22:12:36.723 回答
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' 会被迭代器变量覆盖。

于 2013-10-04T22:16:53.630 回答