Вы можете попробовать этот подкласс OrderedDict
. Мое предыдущее представление было неверным (упомянуто внизу):
from collections import OrderedDict
class MyOrderedDict(OrderedDict):
def index(self, key):
if key not in self.keys():
raise KeyError
return list(d.keys()).index(key)
def prev(self, key):
idx = self.index(key) - 1
if idx < 0:
raise IndexError
return list(d.keys())[idx]
def next(self, key):
_list = list(d.keys())
idx = self.index(key)
if idx > len(_list):
raise IndexError
return _list[idx+1]
# >>> d = MyOrderedDict(((3, 'Three'), (2, 'Two'), (4, 'Four'), (1, 'One')))
# >>> d.index(3)
# 0
# >>> d.index(2)
# 1
# >>> d.prev(2)
# 3
# >>> d.prev(3)
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "<stdin>", line 9, in prev
# IndexError
# >>> d.next(4)
# 1
# >>> d.next(1)
# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# File "<stdin>", line 16, in next
# IndexError: list index out of range
Редактировать - как @agf прокомментировал ниже, это неверно.
Вы ищете быстрый способ получить элемент из myClass
, поэтому вы должны использовать словарь. Но в то же время вы хотите, чтобы данные были в некотором порядке, чтобы вы могли сделать prevItem
для них. Почему бы вам не сохранить свои данные в collections.OrderedDict
, добавленном в Python 2.7, 3.1. ref