python list.append拧上字典条目(只在每个索引中添加最后一个条目)

问题描述:

我有这段代码,单独字典看起来不错,如何添加到列表后,列表只显示最后一个条目python list.append拧上字典条目(只在每个索引中添加最后一个条目)

def readExcel(fInputFile="", sheetname=""): 

    mywb = xlrd.open_workbook(vInputFile, on_demand=True) 
    sheet_names = mywb.sheet_names() 
    mysheet = mywb.sheet_by_name(sheet_names[0]) 
    for row_idx in range(1,mysheet.nrows): 
     for col_idx in range(mysheet.ncols): 
      cell = mysheet.cell(row_idx,col_idx) 
      hdr = mysheet.cell(0,col_idx) 
      init_list(myl,str(hdr.value),str(cell.value)) 
     if testmethod==NOLOAD: 
      mpt_noload_execute(myl) 
     else: 
      myll.append(myl) 
      print("myll after each row", myll[row_idx-1]['uname']) 

    for j in range(len(myll)): 
     print("myll after file reading", myll[j]['uname']) 

==============================

执行和结果:

>python mpt_login_test_driver.py 

('myll after each row', 'autotest01') 
('myll after each row', 'autotest02') 
('myll after each row', 'autotest03') 
('myll after file reading', 'autotest03') <=== error 
('myll after file reading', 'autotest03') <=== error 
('myll after file reading', 'autotest03') 
+0

你怎么得到这个错误信息?什么是my11? – matt

+0

我认为这是一个简短的“** My L **签名** L ** ist”(myll),类似于“** My W ** ork ** B ** ook”(mywb),“* * My ** Spread ** sheet **“(mysheet),”** My L ** ist“(myl)。 –

+0

它没有在页面的任何地方定义。看起来他正在重新使用myl而不是使用新的。 – matt

你需要为myl每次迭代使用一个新字典。否则,你只是修改相同的一个。例如。

def readExcel(fInputFile="", sheetname=""): 

    mywb = xlrd.open_workbook(vInputFile, on_demand=True) 
    sheet_names = mywb.sheet_names() 
    mysheet = mywb.sheet_by_name(sheet_names[0]) 
    for row_idx in range(1,mysheet.nrows): 
     myl={} 
     for col_idx in range(mysheet.ncols): 
      cell = mysheet.cell(row_idx,col_idx) 
      hdr = mysheet.cell(0,col_idx) 
      init_list(myl,str(hdr.value),str(cell.value)) 
     if testmethod==NOLOAD: 
      mpt_noload_execute(myl) 
     else: 
      myll.append(myl) 
      print("myll after each row", myll[row_idx-1]['uname']) 

    for j in range(len(myll)): 
     print("myll after file reading", myll[j]['uname']) 

现在myll将有一个新的字典附加,而不是仅仅修改旧的。

+0

谢谢马特,这是问题,谢谢。我以为一旦myl被追加到myll,我可以重新使用它,但看起来像它添加到myll作为参考点..在每一个行循环创建新的字典解决了。 – Sujan