2013-06-28 8 views
0

Je voudrais convertir des choses de mon csv.reader dans un dictionnaire. J'ai mis en œuvre les instructions de ce poste Add new keys to a dictionary? mais je continue à obtenir IndexError: list index out of range. Comment puis-je réparer cela?ajouter de nouveaux éléments à un dictionnaire

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

Pourriez-vous expliquer ce que vous essayez d'atteindre dans un paragraphe? –

+3

Vous surpassez les limites du second 'item' que vous parcourez, qui est une liste, car chaque itération de la boucle' while' ajoute 3 à la valeur 'row' avec laquelle vous indexez' item', mais ' item' ne fait que 3 éléments (puisque vous l'avez créé comme tel en bouclant 'info'). Vous obtenez une erreur d'index dans la liste. la dict n'a pas de problème. Je seconde @JonClements cependant en voulant savoir ce que vous essayez réellement de faire. –

Répondre

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

collections d'importation

d = collections.OrderedDict()

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

d = {row [0]: la rangée [1] .strip() pour la ligne d'information dans}

pour some1, some2 dans d.items():

et que d'écrire tout le reste

0

Je pense que ce que vous essayez de faire est:

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 

Si vous voulez que les index soient le numéro de ligne si le fichier, alors vous devriez probablement garder comme une liste.

import csv 

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