den Schlüsselindex in einem Python OrderedDict erhalten?

8

Ich habe ein collections.OrderedDict mit einer Liste von Schlüssel-, Wert-Paaren. Ich möchte den Index i so berechnen, dass der Schlüssel i th mit einem gegebenen Wert übereinstimmt. Zum Beispiel:

%Vor%

Ich möchte vom Schlüssel chicken zum Index 3 oder vom Schlüssel rice zum Index 1 gehen. Ich kann das jetzt mit

machen %Vor%

aber Gibt es eine Möglichkeit, die Fähigkeit OrderedDict zu nutzen, Dinge schnell nach Schlüsselnamen zu durchsuchen? Sonst scheint es, als wäre die Indexsuche O (N) und nicht O (log N), und ich habe viele Gegenstände.

Ich nehme an, ich kann das manuell machen, indem ich meinen eigenen Index mache:

%Vor%

aber ich hatte gehofft, dass da etwas in OrderedDict eingebaut sein könnte.

    
Jason S 31.12.2014, 20:55
quelle

3 Antworten

12

Grundsätzlich nein. OrderedDict erhält seine Fähigkeit, schnell nach Schlüsselnamen zu suchen, indem er ein normales, ungeordnetes Diktat unter der Haube verwendet. Die Bestellinformation wird separat in einer doppelt verknüpften Liste gespeichert. Aus diesem Grund gibt es keine Möglichkeit, direkt von dem Schlüssel zu seinem Index zu gehen. Die Reihenfolge in einem OrderedDict soll hauptsächlich für die Iteration verfügbar sein; Ein Schlüssel "kennt" seine eigene Ordnung nicht.

    
BrenBarn 31.12.2014, 21:09
quelle
3

Das OrderedDict ist eine Unterklasse von dict , die in der Lage ist, ihre Schlüssel in der Reihenfolge (und umgekehrt) durch eine doppelt verknüpfte Liste beibehalten . Es kennt also nicht den Index eines Schlüssels. Es kann nur die verknüpfte Liste durchlaufen, um die Elemente in O (n) Zeit zu finden.

Den Quellcode zu lesen ist möglicherweise der beste Weg zu Bestätigen Sie, dass der Index nicht von OrderedDict verwaltet wird. Sie werden sehen, dass nirgendwo ein Index jemals verwendet oder erhalten wird.

    
unutbu 31.12.2014 21:08
quelle
2

Wie andere bereits erwähnt haben, ist ein OrderedDict nur ein Dictionary, das intern daran erinnert, welche Order-Einträge ihm hinzugefügt wurden. Sie können jedoch seine Fähigkeit nutzen, Dinge schnell zu suchen, indem Sie den gewünschten Index zusammen mit den übrigen Daten für jeden Eintrag speichern. Hier ist, was ich meine:

%Vor%     
martineau 31.12.2014 21:38
quelle