Letztes Element in OrderedDict
Habe ich od
Typ OrderedDict
. Ich möchte Zugriff auf die zuletzt hinzugefügten (Schlüssel, Wert) - paar. od.popitem(last = True)
es tun würde, würde aber auch entfernen, das paar aus od
was ich nicht will.
Was ist ein guter Weg, das zu tun? Kann /sollte ich dies tun:
class MyOrderedDict(OrderedDict):
def last(self):
return next(reversed(self))
InformationsquelleAutor der Frage max | 2012-03-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
next(reversed(od))
ist eine perfekte Möglichkeit für den Zugriff auf die zuletzt hinzugefügten element. Die KlasseOrderedDict
verwendet eine doppelt verkettete Liste für die dictionary-Objekte und implementiert__reversed__()
so dass diese Umsetzung gibt Sie O(1) Zugriff auf das gewünschte element. Ob es sich lohnt, UnterklasseOrderedDict()
für diese einfache operation kann in Frage gestellt werden, aber es gibt nichts wirklich falsch mit diesem Ansatz.InformationsquelleAutor der Antwort Sven Marnach
Ein wenig Magie von timeit hier helfen kann...
Ergebnisse in:
(Getestet auf Python ist3.2, Ubuntu Linux).
Wie bereits von @SvenMarnach, die Methode, die Sie beschrieben haben, ist sehr effizient im Vergleich zu den anderen zwei Möglichkeiten, die ich Kochen konnte.
InformationsquelleAutor der Antwort mgilson
Deine Idee ist gut, aber das Standard-iterator ist nur über die Tasten, so dass Ihr Beispiel wird nur der Letzte Schlüssel. Was Sie eigentlich wollen, ist:
Dieser gibt die
(key, value)
Paare, nicht nur die Tasten, wie Sie es wollten.Beachten Sie, dass auf pre-3.x-Versionen von Python,
OrderedDict.items()
gibt eine Liste, so dass Sie nicht brauchen, dielist()
nennen, aber später Versionen geben eine dictionary-Objekt anzeigenso werden Sie.Edit: Wie bereits angemerkt in den Kommentaren, die schneller Betrieb ist zu tun:
Obwohl ich muss zugeben, ich finde diese immer hässlicher in den code (den ich nie mochte immer den Schlüssel dann tut
x[key]
um den Wert getrennt, ich bevorzuge immer die(key, value)
Tupel) - je nach der Bedeutung der Schnelligkeit und Ihrer Voreinstellungen, die Sie wünschen können, um die ehemalige option.InformationsquelleAutor der Antwort Gareth Latty