Su idea está bien, sin embargo, el iterador predeterminado solo está sobre las teclas, por lo que su ejemplo solo devolverá la última clave. Lo que realmente quiere es:
class MyOrderedDict(OrderedDict):
def last(self):
return list(self.items())[-1]
Esto le da al (key, value)
pares, no sólo las llaves, como lo hubiera querido.
Tenga en cuenta que en las versiones pre-3.x de Python, OrderedDict.items()
devuelve una lista, por lo que no es necesario la llamada list()
, pero las versiones posteriores de devolver un dictionary view object, por lo que se quiere.
Editar: Como se ha señalado en los comentarios, la operación más rápida es hacer:
class MyOrderedDict(OrderedDict):
def last(self):
key = next(reversed(self))
return (key, self[key])
Aunque debo admitir que encuentro esto más feo en el código (que nunca ha gustado conseguir la llave a continuación, haciendo x[key]
para obtener el valor por separado, prefiero obtener la tupla (key, value)
). Dependiendo de la importancia de la velocidad y sus preferencias, es posible que desee elegir la opción anterior.
Pero eso solo devuelve la clave del último artículo en el OD, ¿verdad? no el ítem completo (clave, valor). 'next (invertido (OrderedDict ([(0, 'a'), (1, 'b'), (2, 'c')])))' da '2' no' (2, 'c') ' – hobs
@hobs: Sí, solo te da la clave. Cómo obtener el valor dado a la clave se deja como un ejercicio para el lector. :) –
:) así que es O (2) por el problema del OP. detalles que sé ... – hobs