我对不必将int函数映射到当前拥有它的字符串元组感兴趣。请参见我示例的最后一部分:
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
我想做的是这样的事情:
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
我尝试此操作,得到以下错误:
TypeError: int() argument must be a string or a number, not 'list'
我很难理解这个错误信息。我认为读者是一个可接受的对象,而不是一个列表。它为每个迭代返回一个列表,但它本身不是一个列表,对吗?我想这是个次要的问题。我真正想知道的是,有没有办法做我想做的事。抱歉,代码没有真正的联系,但我想我会包括我的整个例子。你可以把它撕成碎片!:)我想知道,如果只使用一个dict,其中的键是一个元组,而不是这个嵌套字典的东西,可能会更好,但即使如此,我仍然有兴趣找出我的问题。
你想要的是:
然后,您的代码将如下所示:
这只是使用生成器函数包装读取器并将输入转换为整数。
TypeError
的起源是reader
是一个生成函数,它列出了yield
的值。当你对它应用map
时,你就是在对一个“列表”应用map
。这不同于将map
应用于一个值列表,当您将它写得很长时,您会执行这个操作。为了说明这一点,另一种方法是
这只是使用原位生成器表达式,而不是定义函数。这是口味的问题。
相关问题 更多 >
编程相关推荐