2017-02-10 4 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 My ** ** ork ** B ** ook」(mywb)に似ている、「** My L ** inked ** L ** ist」(myll) *私の**スプレッド**シート** "(マイシート)、**私のL **イット"(ミル)。 –

+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

おかげでマットが問題だった、ありがとう。私はmyllにmylが追加されたら、私はそれを再利用できると思ったが、参照点としてmyllに追加されたように見える。すべての行ループで新しい辞書を作成することでそれが解決された。 – Sujan

関連する問題