2017-07-09 9 views
1

私のコードでは、以下のコードで複数の辞書を作成しました。動的に作成された辞書を呼び出す

g = globals() 
    lrange = len(requestcells * 2) 
    for i in range(1, lrange): 
     g['request_{0}'.format(i)] = {} 

次に、リストからExcelの座標を繰り返し処理し、そこからデータを抽出するforループがあります。 Excelファイルの各行は別々のデータセット(要求)です。これらのリクエストを別々の辞書に保存したい。

request_1 request_2などなど(ダイナミックそれは常に変化して)

私が上で立ち往生していますが、どのように私入力できる新しい辞書にデータときに、新しい行と複数の反復を超えます。

for items in requestcells: 
     for row in ws.iter_rows(min_row=items, max_row=items): 
      for cell in row: 
       cell_location = (cell.column)  
       header_text = header_dict[cell_location + "3"] 

       # This should be request 1 on first iteration and 3rd on second iteration 

       request_??[header_text] = cell.value 

     for row in ws.iter_rows(min_row=items + 1, max_row=items + 1): 
      for cell in row: 
       cell_location = (cell.column)  
       header_text = header_dict[cell_location + "3"] 

       # This should be request 2 on first iteration and 4th on second iteration 

       request_??[header_text] = cell.value 

答えて

2

データ構造の一部として変数名を使用しないでください。変数名は、プログラマーが入力するためのものです。コードを生成するためにコードを使用している場合は、おそらくそのコードでリストまたは辞書を索引付けすることをお勧めします。

辞書を各グローバル変数にするのではなく、一覧に表示するコードを変更したいと思います。また、偶数と奇数のリクエスト番号で現在インターリーブしている2つの異なるデータセットに対して2つの別々のリストを使用することも意味があります。

requests = [{} for _ in range(len(requestcells * 2)] 

for i, items in enumerate(requestcells): 
    for row in ws.iter_rows(min_row=items, max_row=items): 
     for cell in row: 
      cell_location = (cell.column)  
      header_text = header_dict[cell_location + "3"] 

      requests[2*i][header_text] = cell.value 

    for row in ws.iter_rows(min_row=items + 1, max_row=items + 1): 
     for cell in row: 
      cell_location = (cell.column)  
      header_text = header_dict[cell_location + "3"] 

      requests[2*i+1][header_text] = cell.value 
+0

ありがとうございます。私はそれにいくつかの変更を加えなければなりませんでしたが、あなたは私を正しい道に導きます!すべての作業が完了しました(2倍のリストと調整されたコードは必要なくなりました。* len +リストに基づいて呼び出すことができます)。ありがとう – LPython

関連する問題