Python 3:嵌套for循环跳过嵌套循环

时间:2016-11-03 04:05:05

标签: python for-loop nested-loops

import csv

data = {}
f = open("train.csv")
csv_f = csv.reader(f)
labels = next(csv_f)
for i in range(len(labels-1)):
    a = []
    for row in csv_f:
        a += row[i]
    data [labels[i]] = a

我正在上面的代码尝试读取csv文件并将列放入字典中,第一部分作为标签,第二部分作为值的arra。这适用于我的第一列,我的数据集是'ID',但在此之后它停止工作 - 它只是将a数组留空。我做了一些调试,发现它正在做外部for循环然后是内部循环,但是当它执行外部for循环的第二次运行时,它只是跳过内部for循环。它也为后来的所有人做到了。

为什么这样做?

如何修复我的代码以使其停止?

1 个答案:

答案 0 :(得分:0)

就像凯文上面说的那样,我认为问题在于,在第一次通过csv_f进行迭代后,你必须将csv阅读器重置回文件的开头。此算法要求您多次解析整个文件以收集所有数据。更有效的算法将逐行解析文件。我没有检查过这段代码,所以它可能不是100%,但希望它指出你正确的方向。

import csv

data = {}
f = open("train.csv")
csv_f = csv.reader(f)

isLabelRow = True

for row in csv_f:
    print "Processing row : " + str(row)
    if isLabelRow:
        # Get labels from first row of data
        labels = []
        isLabelRow = False

        # Initialize data "columns"
        for label in row:
            print "Processing label : " + label
            labels.append(label)
            data[label] = [] # empty array

    else:
        # Add each item in the row to the appropriate "column" in data
        for i in range(len(row)):
            data[labels[i]].append(row[i])