L'idea è a posto, tuttavia l'iteratore predefinito si trova solo sopra i tasti, quindi l'esempio restituirà solo l'ultima chiave. Che cosa si vuole realmente è:
class MyOrderedDict(OrderedDict):
def last(self):
return list(self.items())[-1]
Questo dà la (key, value)
coppie, non solo le chiavi, come si voleva.
Si noti che sulle versioni pre-3.x di Python, OrderedDict.items()
restituisce una lista, quindi non è necessario la chiamata list()
, ma le versioni successive restituire un dictionary view object, così si farà.
Edit: Come notato nei commenti, l'operazione più veloce è quello di fare:
class MyOrderedDict(OrderedDict):
def last(self):
key = next(reversed(self))
return (key, self[key])
Anche se devo ammettere che trovo questa brutta nel codice (mi è mai piaciuto ottenere la chiave poi facendo x[key]
per ottenere il valore separatamente, preferisco ottenere la tupla (key, value)
) - a seconda dell'importanza della velocità e delle preferenze, potresti voler scegliere l'opzione precedente.
fonte
2012-03-28 23:46:55
Ma questo restituisce solo la chiave dell'ultimo elemento nell'OD, giusto? non l'intero oggetto (chiave, valore). 'next (reverse (OrderedDict ([(0, 'a'), (1, 'b'), (2, 'c')])))' non '' '' '(2, 'c')' – hobs
@hobs: Sì, fornisce solo la chiave. Come ottenere il valore dato la chiave è lasciata come esercizio al lettore. :) –
:) quindi è O (2) per il problema dell'OP. dettagli che conosco ... – hobs