Wie implementiert man assoziatives Array (kein Wörterbuch) in Python?

7

Ich versuche, ein Wörterbuch in Python auszudrucken:

%Vor%

Obwohl der Eintrag "Vorname" zuerst aufgeführt wird, aber Wörterbücher in Python scheinbar nach Werten sortiert sind, lautet das Ergebnis wie folgt:

%Vor%

Wie drucke ich diese mit der gleichen Reihenfolge im Code oder die Reihenfolge, wenn Elemente in angehängt werden (nicht nach Werten oder Schlüsseln sortiert)?

    
jondinham 29.02.2012, 08:44
quelle

6 Antworten

15

Sie können eine Liste von Tupeln (oder Liste von Listen) verwenden. So:

%Vor%

Sie können daraus ein Wörterbuch mit:

machen %Vor%

Und die richtig sortierten Schlüssel wie folgt:

%Vor%

Dann tu das:

%Vor%

Aber ich stimme den Kommentaren zu Ihrer Frage zu: Wäre es nicht einfach, die Schlüssel in der erforderlichen Reihenfolge zu sortieren, wenn Sie stattdessen eine Schleife erstellen?

BEARBEITEN: (danke Rik Poggi), OrderedDict macht das für dich:

%Vor%     
Johan Lundberg 29.02.2012, 08:48
quelle
16

Zuerst werden Wörterbücher weder nach Schlüssel noch nach Wert sortiert.

Und basierend auf Ihrer Beschreibung. Sie brauchen tatsächlich collections.OrderedDict Modul

%Vor%

Beachten Sie, dass Sie OrderedDict aus der Tupel-Liste instanziieren müssen, die nicht aus einem anderen Diktat stammen, da die Instanz die Reihenfolge der Elemente vor der Ausführung von OrderedDict instanziiert.

    
lig 29.02.2012 08:53
quelle
6

Sie können collections.OrderedDict verwenden. Es ist in python2.7 und python3.2 + verfügbar.

    
strcat 29.02.2012 08:53
quelle
4

Dies könnte Ihren Bedarf besser erfüllen:

%Vor%     
Felix Yan 29.02.2012 08:51
quelle
3

'aber Wörterbücher in Python sind nach Werten sortiert' vielleicht irre ich mich hier, aber was für ein Spiel hast du diese Idee? Wörterbücher sind nach nichts sortiert.

Sie würden zwei Lösungen haben, entweder eine Liste von Schlüsseln zusätzlich zum Wörterbuch behalten oder eine andere Datenstruktur wie ein Array oder Arrays verwenden.

    
Bogdan 29.02.2012 08:51
quelle
3

Ich frage mich, ob es ein geteiltes dict ist, das Sie wollen:

%Vor%

Ein Wörterbuch, das mit dem Befehl OrderdDict erstellt wurde, behält die ursprüngliche Reihenfolge der Platzierung bei .

Mit anderen Worten, ein solches Wörterbuch iteriert über die Schlüssel / Wert-Paare in der Reihenfolge, in der sie eingefügt wurden.

Wenn Sie beispielsweise einen Schlüssel löschen und denselben Schlüssel erneut hinzufügen, ändert sich die Iterationsreihenfolge:

%Vor%     
doug 29.02.2012 08:59
quelle