将字典值分配给变量的问题

问题描述:

我正在努力应对那些“非常明显我是个白痴”问题。我有一个csv文件,我想阅读并用它来创建单独的“表格”。我有一个变量(RID),标志着一个新的'表'的开始。将字典值分配给变量的问题

我无法让我的指标变量(currentRow)在我完成操作每一行时前进。你可以看到打印语句,currentRow保持等于0.
但是如果我在循环外使用赋值语句,我可以随意更改currentRow的值。测试任务只是了解我在循环中的位置。

currentRow=0 
test=0 
theTables=defaultdict(list) 
for line in csv.DictReader(open(r'c:\temp\testread.csv')): 
    newTableKey=line['CIK']+'-'+line['RDATE']+'-'+line['CDATE']+'-'+line['FNAME']+' '+line['TID'] 

    if line['RID']=='1': 
     test+=1 # I can get here 
     if currentRow>int(line['RID']): 
      print 'got here' 

      theTables[oldTableKey]=theList 
      test+=1 # I cannot get here 
     theList=[] 
    theList.append(line) 
    currrentRow=int(line['RID']) 
    print currentRow #this value always prints at 0 
    print int(line['RID']) #this prints at the correct value 
    oldTableKey=newTableKey 
+0

也许我很困惑,但'row ['RID']'从哪里来?除了那行,我没有看到“row”变量。 – Amber 2010-01-01 20:25:25

+0

每一行都是一个字典,在行中有一个叫做RID的键(列标题) – PyNEwbie 2010-01-01 20:27:34

+0

你的代码示例有问题。您正在打印未分配给代码中任何位置的int(row ['RID'])'。如果它是一个错字并且你打印int(line ['RID'])并且它与currentRow分配的不同,那么你还没有插入所有的代码;特别是你遗漏了一些重要的东西,它在赋值后再次修改currentRow。 此外,你可以包括CSV格式? – kibitzer 2010-01-01 20:28:28

在行:

currrentRow=int(line['RID']) 

currrentRowr秒。将它们减少到两个,事情应该会改善。

+0

谢谢亚历克斯我知道这是这些类型的问题之一公众的羞辱对灵魂有益。 干杯 – PyNEwbie 2010-01-01 20:31:49

+2

然后在代码上运行pylint或类似工具,这样您就不必每次都要求Alex检查您的代码。 ;-)见http://infinitemonkeycorps.net/docs/pph/#id3 – 2010-01-01 20:32:25

一种解决方案是添加在循环中的某处如下:

currentRow += 1 

然而,更好的解决办法可能是使用枚举:

for currentRow, line in csv.DictReader..: 
    stuff 
+0

currrentRow = int(line ['RID']) – PyNEwbie 2010-01-01 20:26:42

它看起来对我来说,这是可能theTables[oldTableKey]=theList可能会以未初始化的值oldTableKey执行。