2013-06-28 42 views
0

我想将我的csv.reader中的东西转换为字典。我执行了这个帖子Add new keys to a dictionary?的指示,但我一直得到IndexError: list index out of range。我怎样才能解决这个问题?向字典中添加新元素

import wx 
import csv 

info = csv.reader(open('report.csv', 'rb'),delimiter=',') 

length = 0 
info_list = [] 

for row in info: #search each row in the report 
    info_list.append([length,row[1],row[4]]) 
    length = length + 1 

print length 
dict_info = {} 
rows = 0 
counter = 0 

while counter < length: 
    for item in info_list: 
     dict_info[item[rows]] = [item[rows + 1], item[rows + 2]] 
    rows = rows + 3 
    counter = counter + 1 
print dict_info 
+0

你能解释一下你想在段落中实现什么吗? –

+3

您正在遍历您迭代的第二个'item'的边界,这是一个列表,因为'while'循环的每次迭代都会将您正在索引到'item'的'row'值加3,但是' item'只有3个元素长(因为你在循环'info'的时候创建了它)。列表中出现索引错误;字典没有问题。我第二@JonClements虽然想知道你实际上想要做什么。 –

回答

0
for index, row in enumerate(info): 
    dict_info[index] = [row[1], row[4]] 
0

进口集合

d = collections.OrderedDict()

信息= csv.reader(开放( 'report.csv', 'RB'),分隔符=”, “)

d = {行[0]:行[1] .strip()为行中的信息}

为some1,some2在d.items():

而且比写一切

0

我认为你正在试图做的是:

import csv 

info = csv.reader(open('report.csv', 'rb'),delimiter=',') 
dict_info = {row[0]:[row[1], row[4]] for row in info} 
print dict_info 

如果你想索引是行号,如果该文件,那么你或许应该只是不停它作为一个列表。

import csv 

info = csv.reader(open('report.csv', 'rb'),delimiter=',') 
list_info = [[row[1], row[4]] for row in info] 
print list_info