2017-02-10 74 views
1

我有這段代碼,單獨字典看起來不錯,如何添加到列表後,列表只顯示最後一個條目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

回答

1

你需要爲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

相關問題