class OrderedDict(dict): """ A Dictionary ADT that preserves ordering of its keys through a parallel list. Inherits from the dict built-in python class, extending functionality relevant to ordering. """ def __init__(self): self.__ordering = list() dict.__init__(self) def __setitem__(self, key, value): if key not in self: self.__ordering.append(key) dict.__setitem__(self, key, value) def __delitem__(self, key): dict.__delitem__(self, key) self.__ordering.remove(key) def append(self, item): self.__ordering.append(item) def remove(self, item): self.__ordering.remove(item) def sort(self): self.__ordering.sort() def reorder(self, position, key): if key in self.__ordering: self.__ordering.remove(key) self.__ordering.insert(position, key) def __iter__(self): for item in self.__ordering: yield item def values(self): return self.__ordering def iterkeys(self): self.__iter__() def itervalues(self): for item in self.__ordering: yield self[item] def iteritems(self): for item in self.__ordering: yield item, self[item] def __str__(self): str = '' for item in self.iteritems(): str += item.__str__() + '\n' return str