我陷入了创建列列表的过程中。我试图避免使用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文件示例:
答案 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)
希望它可以帮助!