On Apr 18, 3:32 am, Steven D'Aprano <[EMAIL PROTECTED]> wrote: > On Wed, 18 Apr 2007 06:13:39 +0000, I V wrote: > > On Wed, 18 Apr 2007 15:39:22 +1000, Steven D'Aprano wrote: > >> I thought that an iterator was any object that follows the iterator > >> protocol, that is, it has a next() method and an __iter__() method. > > [snip] > > > i.e., just rename your _next function to __iter__ . Your class won't > > itself be an iterator, but it will be usable in for statements and so one, > > and convertable to an iterator with the iter builtin. > > Thanks to all those who helped, this fixed my problem. > > For the record, this is what I actually wanted: a four-line self-sorting > dictionary: > > class SortedDict(dict): > def __iter__(self): > for key in sorted(self.keys()): > yield key > > Note that using sorted(self) does not work. > > Iterating over a SortedDictionary returns the keys in sorted order. This > minimalist implementation doesn't sort the values, items or string > representation of the dict, but they should be easy to implement. > > -- > Steven D'Aprano
Very neat. Why not this? class SortedDict(dict): def __iter__(self): return iter(sorted(self.keys())) -- Paul -- http://mail.python.org/mailman/listinfo/python-list