2017-04-21 2 views
2

Ich versuche, mit XlsxWriter aus Python in eine Excel-Arbeitsmappe zu schreiben. Ich habe ein Wörterbuch mit der Bezeichnung Pg, deren Schlüssel Tupel sind.Wie erzwingen Wörterbuch Elemente in der Reihenfolge geschrieben werden?

for key,value in Pg.iteritems(): 
    for t in range(1,4): 
     if key==(0,t): 
     worksheet.write(row,col,value.x) 
     row += 1 

Ich möchte Werte von Schlüssel (0, t) in einer Spalte schreiben, aber die Werte erscheinen nicht in der normalen Reihenfolge. Zum Beispiel, wenn mein Wörterbuch sieht wie folgt aus:

Pg={(0,1):1,(0,2):2,(0,3):3} 

ich in Excel:

1 
3 
2 

Warum ist das passiert, wenn ich streng in der zweiten for Schleife festgestellt haben, wie ich meine Werte sein wollen geschrieben?

+0

Antworten hier. [http://stackoverflow.com/questions/13437727/python-write-to-excel-spreadsheet](http://stackoverflow.com/questions/13437727/python-write-to-excel-spreadsheet) – voidpro

+0

Mögliche doppelte von [Python - In Excel-Tabelle schreiben] (http://stackoverflow.com/questions/13437727/python-write-to-excel-spreadsheet) – user2263572

+0

Diese Frage ist kein Duplikat der verknüpften Frage. Ich habe die Betreffzeile überarbeitet, um die Stoßrichtung dieser Frage genauer widerzuspiegeln. (Es ist sehr wahrscheinlich ein Duplikat von * anderen * Fragen zu Python-Wörterbüchern und wie man sie bestellt. Einfach in Excel zu schreiben ist nicht das Hauptproblem hier.) –

Antwort

3

Ich denke, Sie erkennen, dass Sie keine bestimmte Reihenfolge garantieren, wenn Sie über ein Wörterbuch iterieren. Das Problem, das Sie haben, ist, dass die Art, wie Sie versuchen, eine Bestellung zu erzwingen, fehlerhaft ist.

for key,value in Pg.iteritems(): 
    for t in range(1,4): 
     if key==(0,t): 
      # ... 

Was das bedeutet ist Iterierte über jedem ersten key, value Paar. In diesem Fall geben Sie aus, wenn der Schlüssel einer bestimmten Bedingung entspricht. Wenn Sie die Reihenfolge der for Schleifen geändert haben, würden Sie bekommen, was Sie wollten, aber diese Methode ist überhaupt nicht effizient.

Einfacher ausgedrückt, können Sie über die sortierten Wörterbuch wie folgt durchlaufen:

for key, value in sorted(Pg.iteritems()): 
    worksheet.write(row, col, value.x) 
    row += 1 
+0

Danke, das hat mein Problem gelöst – user7901517

Verwandte Themen