Python wählt ein Element in OrderedDict

7

Ich habe einen Codeschnipsel, der ein Wörterbuch alphabetisch sortiert. Gibt es eine Möglichkeit, den i-ten Schlüssel im bestellten Wörterbuch auszuwählen und den entsprechenden Wert zurückzugeben? d. h.

%Vor%

Ich möchte eine Funktion entlang der Ader von ...

haben %Vor%

Wie kann dies erreicht werden? Danke.

(Ähnlich wie Zugriff auf Elemente in einem Ordereddict , aber ich möchte nur ausgeben der Wert des Schlüssel-Wert-Paares.)

    
Pingk 24.03.2014, 13:32
quelle

4 Antworten

12

In Python 2:

Wenn Sie auf den Schlüssel zugreifen möchten:

%Vor%

Wenn Sie auf den Wert zugreifen möchten:

%Vor%

Wenn Sie Python 3 verwenden, können Sie das von der Methode KeysView zurückgegebene Objekt keys konvertieren, indem Sie es als Liste umschließen:

%Vor%

Nicht die schönste Lösung, aber es funktioniert.

    
Daniel Lee 24.03.2014, 13:39
quelle
8

itertools.islice ist hier effizient, weil wir es nicht müssen Erstellen Sie Zwischenlisten für Subskriptionen.

%Vor%

Wenn Sie nur den Wert möchten, können Sie

tun %Vor%     
thefourtheye 24.03.2014 13:35
quelle
5

Müssen Sie ein OrderedDict verwenden oder wollen Sie nur einen dict-ähnlichen Typ, der die Indizierung unterstützt? Wenn letzteres gilt, dann betrachte ein sortiertes dict-Objekt. Einige Implementierungen von SortedDict (die Paare basierend auf der Schlüsselsortierreihenfolge anordnet) unterstützen schnelle n-te Indizierung. Zum Beispiel hat das Projekt sortedcontainers eine SortedDict Typ mit Direktzugriffsindizierung.

In Ihrem Fall würde es ungefähr so ​​aussehen:

%Vor%

Wenn Sie viele Nachschlagevorgänge durchführen, ist dies viel schneller als das wiederholte Iterieren zum gewünschten Index.

    
GrantJ 08.04.2014 04:22
quelle
0

Unterschätzen Sie nicht nur eine einfache 'ole für Schleife:

%Vor%

Der Vorteil hierbei ist, dass die Schleife bricht, sobald das gewünschte Element gefunden wird, und ein vernünftiges Ergebnis zurückgibt, wenn sie nicht gefunden wird ...

Der Nachteil ist, dass relative Slices nicht unterstützt werden.

    
dawg 24.03.2014 15:13
quelle