2017-07-09 51 views
1

In meinem Code habe ich mehrere Wörterbücher mit dem folgenden Code erstellt;Dynamisch erstellte Wörterbücher aufrufen

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

I haben dann eine für die Schleife iteriert über Excel aus einer Liste koordiniert und extrahiert Daten aus ihnen. Jede Zeile in der Excel-Datei ist ein separater Datensatz (Anfrage). Ich möchte diese Anfragen in einem separaten Wörterbuch speichern.

request_1 request_2 etc etc (Dynamic, wie es immer ändert)

aber ich stecke, wie ich kann, geben Sie die Daten in ein neues Wörterbuch, wenn seine eine neue Zeile und über mehrere Iterationen.

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 

Antwort

2

Verwenden Sie keine Variablennamen als Teil Ihrer Datenstruktur. Variablennamen sind für den Programmierer einzugeben. Wenn Sie Code verwenden, um sie zu erstellen, möchten Sie wahrscheinlich, dass der Code stattdessen eine Liste oder ein Wörterbuch indiziert.

Ich würde den Code ändern, den Sie gezeigt haben, um die Wörterbücher in eine Liste zu setzen, anstatt sie alle globalen Variablen zu machen. Es kann auch sinnvoll sein, zwei getrennte Listen für die zwei unterschiedlichen Datensätze zu verwenden, die Sie gerade mit Ihren geraden und ungeraden Anforderungsnummern verschachteln.

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

Vielen Dank. Ich musste einige Änderungen vornehmen, aber Sie haben mich auf den richtigen Weg geführt! Alles funktioniert jetzt (2x Listen und angepasster Code um nicht mehr zu brauchen * und kann jetzt auf Len + Liste zugreifen. Danke :) – LPython

Verwandte Themen