Python csv reader - convierte cadenas a int en la línea for cuando itera
Estoy interesado en no tener que escribir mapear la función int a la tupla de cadenas donde actualmente la tengo. Vea la última parte de mi ejemplo:
import os
import csv
filepath = os.path.normpath("c:/temp/test.csv")
individualFile = open(filepath,'rb')
dialect = csv.Sniffer().sniff(individualFile.read(1000))
individualFile.seek(0)
reader = csv.reader(individualFile,dialect)
names = reader.next()
print names
def buildTree(arityList):
if arityList == []:
return 0
else:
tree = {}
for i in xrange(arityList[0][0],arityList[0][1]+1):
tree[i] = buildTree(arityList[1:])
return tree
census = buildTree([(1,12),(1,6),(1,4),(1,2),(0,85),(0,14)])
for m, f, s, g, a, c, t in reader:
try:
m,f,s,g,a,c,t = map(int,(m,f,s,g,a,c,t))
census[m][f][s][g][a][c] += t
except:
print "error"
print m, f, s, g, a, c, t
break
Lo que quiero hacer es algo como esto:
for m, f, s, g, a, c, t in map(int,reader):
try:
census[m][f][s][g][a][c] += t
except:
print "error"
print m, f, s, g, a, c, t
break
Intento esto y me sale el siguiente error:
TypeError: int() argument must be a string or a number, not 'list'
Tengo problemas para entender este mensaje de error. Pensé que el lector era un objeto iterable, no una lista. Devuelve una lista para cada iteración, pero en sí misma no es una lista, ¿correcto? Supongo que es más una pregunta secundaria. Lo que realmente quiero saber es si hay una manera de hacer lo que estoy tratando de hacer. Perdón por el código que realmente no se relaciona, pero pensé que incluiría todo mi ejemplo. ¡Siéntete libre de romperlo en pedazos! :) Me pregunto si sería mejor tener un solo dict donde la clave es una tupla en lugar de este diccionario anidado, pero aun así, todavía estoy interesado en resolver mi pregunta.