Ваша идея в порядке, однако итератор по умолчанию работает только над ключами, поэтому ваш пример вернет только последний ключ. На самом деле вы хотите:
class MyOrderedDict(OrderedDict):
def last(self):
return list(self.items())[-1]
Это дает пары (key, value)
, а не только ключи, как вы хотели.
Обратите внимание, что в версиях Python до 3.x OrderedDict.items()
возвращает список, поэтому вам не нужен вызов list()
, но более поздние версии возвращают объект представления словаря , поэтому вы будете.
Редактировать: Как отмечено в комментариях, более быстрая операция должна сделать:
class MyOrderedDict(OrderedDict):
def last(self):
key = next(reversed(self))
return (key, self[key])
Хотя я должен признать, что нахожу это уродливым в коде (мне никогда не нравилось получать ключ, тогда я делал x[key]
, чтобы получить значение отдельно, я предпочитаю получать кортеж (key, value)
) - в зависимости от важности ваши предпочтения, вы можете выбрать первый вариант.