Ihre Idee ist gut, aber der Standard-Iterator ist nur über die Schlüssel, so wird Ihr Beispiel nur den letzten Schlüssel zurückgeben. Was Sie wirklich wollen, ist:
class MyOrderedDict(OrderedDict):
def last(self):
return list(self.items())[-1]
Dies ergibt die (key, value)
Paare, nicht nur die Schlüssel, wie man wollte.
Beachten Sie, dass auf Pre-3.x-Versionen von Python, OrderedDict.items()
eine Liste, so dass Sie den list()
Anruf nicht benötigen, aber spätere Versionen geben einen dictionary view object, so werden Sie.
Edit: Wie in den Kommentaren erwähnt, desto schneller Betrieb zu tun ist:
class MyOrderedDict(OrderedDict):
def last(self):
key = next(reversed(self))
return (key, self[key])
Obwohl ich mich finde diese hässliche im Code muss zugeben (ich nie gemocht dann den Schlüssel bekam x[key]
tun zu bekommen der Wert getrennt, ich bevorzuge die (key, value)
Tupel) - abhängig von der Wichtigkeit der Geschwindigkeit und Ihrer Vorlieben, möchten Sie vielleicht die vorherige Option wählen.
Aber das gibt nur den Schlüssel des letzten Artikels in der OD, richtig? nicht der gesamte Gegenstand (Schlüssel, Wert). 'next (reversed (OrderedDict ([(0, 'a'), (1, 'b'), (2, 'c')]))) ergibt '2' nicht '(2,' c ')' – hobs
@hobs: Ja, es gibt Ihnen nur den Schlüssel. Wie man den gegebenen Wert erhält, bleibt dem Leser als Übung überlassen. :) –
:) also ist es O (2) für das OP-Problem. Details Ich weiß ... – hobs