As you said, you can do your own implementation with bisect:
class OrderedDict: def __init__(self, keyvalues_iter): self.__srtlst__ = sorted(keyvalues_iter) def __len__(self): return len(self.__srtlst__) def __contains__(self, key): index = bisect(self.__srtlst__, key) if index<len(self.__srtlst__) and self.__srtlst__[index][0] == key: return True else: return False def __getitem__(self, key): index = bisect(self.__srtlst__, key) if index<len(self.__srtlst__) and self.__srtlst__[index][0] == key: return self.__srtlst__[index][1] else: raise KeyError(key) def __setitem__(sekf, key, value): index = bisect(self.__srtlst__, key) if index<len(self.__srtlst__) and self.__srtlst__[index][0] == key: self.__srtlst__[index][1] = value else: self.__srtlst__[index]=(key, value) def __delitem__(sekf, key, value): index = bisect(self.__srtlst__, key) if index<len(self.__srtlst__) and self.__srtlst__[index][0] == key: del __srtlst__[index] else: raise KeyError(key) def __iter__(self): return (v for k,v in self.__srtlst__) def clear(self): self.__srtlst__ = [] def get(self, key, default=None): index = bisect(self.__srtlst__, key) if index<len(self.__srtlst__) and self.__srtlst__[index][0] == key: return self.__srtlst__[index][1] else: return default def items(self): return self.__srtlst__[:] def iteritems(self): return iter(self.__srtlst__) def iterkeys(self): return (k for k,v in self.__srtlst__) def itervalues(self): return (v for k,v in self.__srtlst__) def keys(self): return [k for k,v in self.__srtlst__] def values(self): return [v for k,v in self.__srtlst__] def setdefault(self, key, default): index = bisect(self.__srtlst__, key) if index<len(self.__srtlst__) and self.__srtlst__[index][0] == key: return self.__srtlst__[index][1] else: self.__srtlst__[index]=(key, default) return default def update(self, other):
hmmm ... it seems that I already did this for you, d'oh!
fortran
source share