[Python-Dev] More compact dictionaries with faster iteration

Nick Coghlan ncoghlan at gmail.com
Wed Dec 12 01:15:34 CET 2012

On Wed, Dec 12, 2012 at 5:37 AM, Dino Viehland <dinov at microsoft.com> wrote:

> OTOH changing certain dictionaries in IronPython (such as keyword args) to
> be
> ordered would certainly be possible.  Personally I just wouldn't want to
> see it
> be the default as that seems like unnecessary overhead when the specialized
> class exists.

Which reminds me, I was going to note that one of the main gains with
ordered keyword arguments, is their use in the construction of string-keyed
objects where you want to be able to control the order of iteration (e.g.
for serialisation or display purposes). Currently you have to go the path
of something like namedtuple where you define the order of iteration in one
operation, and set the values in another.

Initialising an ordered dict itself is one obvious use case, but anything
else where you want to control the iteration order *and* set field names
and values in a single call will potentially benefit.

Independently of that, I'll note that this change would make it possible to
add a .sort() method to dictionaries. Any subsequent mutation of the
dictionary would requiring resorting, though (which isn't really all that
different from maintaining a sorted list). The performance impact
definitely needs to be benchmarked though, as the need to read two memory
locations rather than one for a dictionary read could have weird caching
effects. (Fortunately, many of the benchmarks run on Python 3.3 now, so it
should be possible to get that data fairly easily)


Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20121212/79d29a79/attachment.html>

More information about the Python-Dev mailing list