Mark Summerfield wrote: > So to clarify, here's the entire API I'm proposing for ordereddict. In > all cases the ordereddict is always in (and kept in) key order, and > any method that returns a list or iterator always returns that list or > iterator (whether of keys or values) in key order: > > ordereddict(dictionary=None) > The argument can be a dict or another ordereddict; all the dict() > initializer > approaches should also be supported. > > ordereddict.update(dictonary=None, **kwargs) > Same as dict.update()---except that key order is preserved (a > point I won't > repeat in the others when I say "same as dict", but which is true > throughout) > > @classmethod > ordereddict.fromkeys(cls, iterable, value=None) # Same as dict > > ordereddict.key(index : int) -> key > Returns the index-th item's key > > ordereddict.item(index : int) -> (key, value) > Returns the index-th item > > ordereddict.value(index : int) -> value > Returns the index-th item's value > > ordereddict.set_value(index : int, value) > Sets the index-th item's value to value; raises IndexError if > index is out of > range. If not expensive, maybe return the key. > > ordereddict.copy() # Same as dict. > ordereddict.clear() # Same as dict. > ordereddict.get(key, value=None) # Same as dict > ordereddict.setdefault(key, value) # Same as dict > ordereddict.pop(key, value) # Same as dict > ordereddict.popitem() # Same as dict > > ordereddict.keys(fromindex : int = None, uptoindex : int : None) -> > list of keys > Returns an ordered list of keys, or a slice of keys if one or two > indexes is given > > ordereddict.values() # Same as dict > ordereddict.items() # Same as dict > ordereddict.iterkeys() # Same as dict > ordereddict.itervalues() # Same as dict > ordereddict.iteritems() # Same as dict > ordereddict.has_key() # Same as dict > > Also the same as dict (and as always, working in key order): > > for key in d: pass > if key in d: pass > len(d) > del d[key] > d[key] > d[key] = value
May I also make one more suggestion, to call it a "sort_ordered_dict" (or "sortordereddict", or even better a "sorteddict"--where the "ed" comes from "ordered")? Its hard for me to move past the established definition of "order", as we think of tuples being ordered--as in the first sentence of http://en.wikipedia.org/wiki/Tuple--to something that is preserving an order according to a comparison. The distinction is so firmly ingrained in my head that it took me a while to wake up to the fact that you were describing something completely different than an ordered dictionary (e.g. http://www.voidspace.org.uk/python/odict.html) even though you were being very unambiguous with your description. And I also think the ability to drop it in for a built-in dict is very valuable. James -- http://mail.python.org/mailman/listinfo/python-list