[Python-Dev] Proposal: add odict to collections
Michael Foord
fuzzyman at voidspace.org.uk
Sun Jun 15 01:44:24 CEST 2008
Armin Ronacher wrote:
> Hi,
>
> I noticed lately that quite a few projects are implementing their own
> subclasses of `dict` that retain the order of the key/value pairs.
> However half of the implementations I came across are not implementing
> the whole dict interface which leads to weird bugs, also the performance
> of a Python implementation is not that great.
>
>
I'm +1 - but this proposal has been made many times before and people
always argue about what features are needed or desirable. :-(
Michael Foord
> To fight that problem I want to proposed a new class in "collections"
> called odict which is a dict that keeps the items sorted, similar to
> a PHP array.
>
> The interface would be fully compatible with dict and implemented as
> dict subclass. Updates to existing keys does not change the order of
> a key but new keys are inserted at the end.
>
> Additionally it would support slicing where a list of key, value tuples
> is returned and sort/reverse/index methods that work like their list
> equivalents. Index based lookup could work via odict.byindex().
>
> An implementation of that exists as part of the ordereddict implementation
> which however goes beyond that and is pretty much a fork of the python
> dict[1].
>
> Some reasons why ordered dicts are a useful feature:
>
> - in XML/HTML processing it's often desired to keep the attributes of
> an tag ordered during processing. So that input ordering is the
> same as the output ordering.
>
> - Form data transmitted via HTTP is usually ordered by the position
> of the input/textarea/select field in the HTML document. That
> information is currently lost in most Python web applications /
> frameworks.
>
> - Eaiser transition of code from Ruby/PHP which have sorted
> associative arrays / hashmaps.
>
> - Having an ordered dict in the standard library would allow other
> libraries support them. For example a PHP serializer could return
> odicts rather then dicts which drops the ordering information.
> XML libraries such as etree could add support for it when creating
> elements or return attribute dicts.
>
> Regards,
> Armin
>
>
> [1]: http://www.xs4all.nl/~anthon/Python/ordereddict/
>
> _______________________________________________
> Python-Dev mailing list
> Python-Dev at python.org
> http://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: http://mail.python.org/mailman/options/python-dev/fuzzyman%40voidspace.org.uk
>
--
http://www.ironpythoninaction.com/
http://www.theotherdelia.co.uk/
http://www.voidspace.org.uk/
http://www.ironpython.info/
http://www.resolverhacks.net/
More information about the Python-Dev
mailing list