从csv创建列表时枚举附加错误

时间:2016-05-20 09:13:27

标签: python list append enumerate

我陷入了创建列列表的过程中。我试图避免使用defaultdict

感谢您的帮助!

这是我的代码:

# Read CSV file
with open('input.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    #-----------#
    row_list = []
    column_list = []
    year = []
    suburb = []
    for each in reader:
        row_list = row_list + [each]
        year = year + [each[0]]#create list of years
        suburb = suburb + [each[2]]#create list of suburb
        for (i,v) in enumerate(each[3:-1]):
            column_list[i].append(v)
            #print i,v
    #print column_list[0]

我的错误讯息:

 19         suburb = suburb + [each[2]]#create list of suburb
 20         for i,v in enumerate(each[3:-1]):
 ---> 21             column_list[i].append(v)
 22             #print i,v
 23 #print column_list[0]

 IndexError: list index out of range

(i,v)的印刷结果:

0 10027
1 14513
2 3896
3 23362
4 77966
5 5817
6 24699
7 9805
8 62692
9 33466
10 38792
0 0
1 122
2 0
3 
4 137
5 0
6 0
7 
8 
9 77
10 

基本上,我希望列表看起来像这样。

column[0]=['10027','0']
column[1]=['14513','122']

我的csv文件示例:

enter image description here

2 个答案:

答案 0 :(得分:0)

发生错误是因为column_list为空,因此您无法访问column_list[i],因为它不存在。你想要附加到它并不重要,因为你不能附加不存在的东西,并且追加不会从头开始创建它。

column_list = defaultdict(list)确实可以解决这个问题,但由于你不想这样做,最简单的方法是确保column_list以大量空列表开头。像这样:

column_list = [[] for _ in range(size)]

其中size是列数,each[3:-1]的长度,根据您的输出显然为11。

答案 1 :(得分:0)

是的像Alex提到的问题确实是由于在创建/初始化索引之前尝试访问索引作为替代解决方案,您也可以考虑这个问题。

for (i,v) in enumerate(each[3:-1]):
            if len(column_list) < i+1:
                column_list.append([])
            column_list[i].append(v)
希望它可以帮助!