所以我有这个代码。但它只在第一次迭代时正确运行。在第二次迭代中,不启动内部for循环。想法为什么?
额外信息如果有帮助:d是DictReader对象,searchtermslist是字符串列表。当我在第1点写一条打印行时,它会在每次我预期的时候打印出来。但是,当termindex = 0但不是任何其他时间时,点2处的打印行打印。如果您还有其他需要,请告诉我。
提前致谢, d
searchsums=[]
for termindex, term in enumerate(searchtermslist):
#Point 1
searchnumbers=[]
for indiv_dict in d:
#point 2
val=indiv_dict[term]
result=str(val)
numbler=float(result)
searchnumbers.append(numbler)
if termindex==0:
searchsums=searchnumbers[:]
else:
map(sum,zip(searchsums,searchnumbers))
答案 0 :(得分:1)
您的第一次循环迭代会消耗d
,使其无法用于后续迭代。在尝试使用之前将其读入列表或元组。
答案 1 :(得分:1)
如果d
是csv.DictReader对象,那么当您对其进行迭代时,它会从CSV文件中读取行,直到文件耗尽(即文件结束)。尝试迭代第二次将不会产生任何结果,因为该文件已经在文件结尾。
您需要返回文件的开头。例如,如果您创建了d
,请执行以下操作:
>>> myfile = open('name_of_csv_file.csv', 'r')
>>> d = csv.DictReader(myfile)
然后你可以像这样返回文件的开头:
>>> myfile.seek(0)
答案 2 :(得分:0)
你可以直接写:
searchnumbers.append(float(str(indiv_dict[term])))
虽然在某些事情上应用str
然后被迫申请float
indiv_dict[term]
本身不是浮动的吗?
我认为你的问题是由于 d 充当迭代器的事实:一旦它被读取一次,它就会耗尽并且不再产生数据