[Python-Dev] Proposal: add odict to collections

Armin Ronacher armin.ronacher at active-4.com
Sun Jun 15 08:07:47 CEST 2008


Raymond Hettinger <python <at> rcn.com> writes:

> For an insertion order dictionary, there was also a question about
> how to handle duplicate keys.
> 
> Given odict([(k1,v1), (k2,v2), (k1,v3)]), what should the odict.items() return?
> 
>    [(k1,v3), (k2,v2)]
>    [(k2,v2), (k1,v3)]
All the ordered dict implementations I saw behave like this:

    >>> odict([(1, 'foo'), (2, 'bar'), (1, 'baz')]).items()
    [(1, 'baz'), (2, 'bar')]

And that makes sense because it's consistent with the dict interface.
But I guess that is a pretty small issue and most of the time you are
not dealing with double keys when using an ordered dict.

> IIRC, previous discussions showed an interest in odicts but that
> there were a lot of questions of the specific semantics of the API.
No doubt there.  But 

> This would no doubt be compounded by attempts to emulate
> dict views. Regardless, there should probably be a PEP and
> alternate pure python versions should be posted on ASPN so people
> can try them out.
That's true, but by now there are countless of ordered dict implementations
with a mostly-compatible interface and applications and libraries are
using them already.

I have an example implementation here that incorporates the ideas
from ordereddict, Django's OrderedDict and Babel's odict:

    http://dev.pocoo.org/hg/sandbox/raw-file/tip/odict.py


Regards,
Armin



More information about the Python-Dev mailing list