OrderedDict: switch keys/iterkeys, item/iteritems, values/itervalues

Issue #774 resolved
Former user created an issue

In current svn version sqlalchemy.utils.OrderedDict keys/iterkeys pair etc. see like

!#python
    def values(self):
        return [self[key](self[key) for key in self._list]

    def itervalues(self):
        return iter(self.values())

    def keys(self):
        return list(self._list)

    def iterkeys(self):
        return iter(self.keys())

    def items(self):
        return [self[key]((key,)) for key in self.keys()]

    def iteritems(self):
        return iter(self.items())

Maybe you can change it to generators way

!#python
    def values(self):
        return list(self.itervalues())

    def itervalues(self):
        return (self[key](key) for key in self._list)

    def keys(self):
        return list(self.iterkeys())

    def iterkeys(self):
        return iter(self._list)

    def items(self):
        return self.iteritems()

    def iteritems(self):
        return ((key, self[key](key)) for key in self.iterkeys())

Maybe proposed solution will be faster in some cases. I don't see contra-indications and brokens.

Comments (1)

  1. jek

    Changes that use generators will need to wait until SQLAlchemy drops support for Python 2.3, which most likely will not be any time soon, sadly. Closing this one for now... although benchmarks on how this proposed change affects SA performance would be interesting to see!

  2. Log in to comment