Ordered dict by default

Duncan Booth duncan.booth at invalid.invalid
Thu Feb 5 06:08:09 EST 2009


Paul Rubin <http://phr.cx@NOSPAM.invalid> wrote:

> bearophileHUGS at lycos.com writes:
>> Now Ruby dicts are ordered by default:
>> http://www.igvita.com/2009/02/04/ruby-19-internals-ordered-hash/
> 
> Maybe I didn't read that carefully enough, but it looks like "ordered"
> means the dict records come out in the same order you inserted them
> in.  That is if you insert B,A,D,C in that order, you get them out in
> that order.  I would have thought an ordered dict meant you get A,B,C,D,
> which seems a lot more useful.
> 
If you want to write doctests then any stable order in the default dict 
type would be helpful no matter whether it means that keys are in original 
insertion or latest insertion order or sorted.

There are other use cases where maintaining insertion order is important. 
For example any automated code generator which parses its previous output 
and then regenerates it maintaining edits. I ran into that before with one 
which just stored the methods in a Python dict so that every so often you'd 
find the entire source file had rearranged itself making a mess of version 
control.

It would certainly be an interesting experiment to mimic the Ruby dict 
implementation in Python's dict code and see what effect it has on 
performance: the Ruby page claims that while inserts are slower traversal 
is much faster. I think it would need some pretty convincing arguments 
though to become the default.

-- 
Duncan Booth http://kupuguy.blogspot.com



More information about the Python-list mailing list