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:
Ich möchte vom Schlüssel chicken
zum Index 3 oder vom Schlüssel rice
zum Index 1 gehen. Ich kann das jetzt mit
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.
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.
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.
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%Tags und Links python dictionary ordereddictionary