2016-02-29 103 views
4

我试图填补CSV数据的默认字典,我得到一个关键的错误KeyError异常灌装Defaultdict的Python

for i in range(0,1): 

    #https://docs.python.org/2/library/collections.html#collections.defaultdict 
    result = co.defaultdict(list) 
    with open(os.path.join(inputdir,tablelist[i])) as f: 

     csv_reader = csv.reader(f) 
     csv_headings = next(csv_reader) 
     read = csv.DictReader(f) 

     for line in read: 
      for j in range(1,len(csv_headings)): 
    error here--->result[line[csv_headings[0]]].append(line[csv_headings[j]]) 

为CSV数据

API,CNTYNM,PRMT, 
4700100002,Barbour,2, 
4700100003,Barbour,3, 
4700100004,Barbour,4, 

关键的错误是API,它对我来说意味着与dictreader的东西不能按预期工作,任何人都可以提供一些建议?

回答

2

您缺少fieldnames的参数DictReader。如果您修改代码以传递csv_haedingsDictReader它会工作(希望如预期):

for i in range(0,1): 

    #https://docs.python.org/2/library/collections.html#collections.defaultdict 
    result = co.defaultdict(list) 
    with open(os.path.join(inputdir,tablelist[i])) as f: 

     csv_reader = csv.reader(f) 
     csv_headings = next(csv_reader) 
     read = csv.DictReader(f, fieldnames=csv_headings) 

     for line in read: 
      for j in range(1,len(csv_headings)): 
       result[line[csv_headings[0]]].append(line[csv_headings[j]]) 
+0

哦,我没有看到,大约一个半小时了。谢谢,我没有意识到fieldnames必须传递给dictreader,但是它确实造成了snesne –