2009/2/13 Eric Dorsey <[email protected]>:
> Alan, can you give a short snippet of what that would look like? I was
> trying to code out some idea of how you'd retain insertion order using
> another dict or a list and didn't get anywhere.
Here's something basic:
class o_dict(dict):
def __init__(self, *args, **kw):
dict.__init__(self, *args, **kw)
self.__keylist = []
def __setitem__(self, key, val):
dict.__setitem__(self, key, val)
if key not in self.__keylist:
self.__keylist.append(key)
def __iter__(self):
return iter(self.__keylist)
It will do the right thing if you do 'for key in odict:', but not for
things like iteritems(). It will break if you delete keys from the
dictionary, and the 'key not in self.__keylist' test will get slow if
you have lots and lots of keys. It will also not do what you want if
you initialise it as something like: o_dict(foo=1, bar=2)
All of which goes to show that you're probably better off looking for
an implementation online, since someone else is bound to have tied off
all the issues :-)
--
John.
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor