[Python-Dev] More compact dictionaries with faster iteration
andrew.svetlov at gmail.com
Mon Dec 10 23:14:10 CET 2012
On Mon, Dec 10, 2012 at 11:29 PM, Tim Delaney <tim.delaney at aptare.com> wrote:
> On 11 December 2012 05:01, Armin Rigo <arigo at tunes.org> wrote:
>> Hi Philip,
>> On Mon, Dec 10, 2012 at 5:16 PM, PJ Eby <pje at telecommunity.com> wrote:
>> > On the other hand, this would also make a fast ordered dictionary
>> > subclass possible, just by not using the free list for additions,
>> > combined with periodic compaction before adds or after deletes.
>> Technically, I could see Python switching to ordered dictionaries
>> everywhere. Raymond's insight suddenly makes it easy for CPython and
>> PyPy, and at least Jython could use the LinkedHashMap class (although
>> this would need checking with Jython guys). I'd vaguely argue that
>> dictionary orders are one of the few non-reproducible factors in a
>> Python program, so it might be a good thing. But only vaguely ---
>> maybe I got far too used to random orders over time...
> Whilst I think Python should not move to ordered dictionaries everywhere, I
> would say there is an argument (no pun intended) for making **kwargs a
> dictionary that maintains insertion order *if there are no deletions*. It
> sounds like we could get that for free with this implementation, although
> from another post IronPython might not have something suitable.
Please, no. dict and kwargs should be unordered without any assumptions.
> I think there are real advantages to doing so - a trivial one being the
> ability to easily initialise an ordered dictionary from another ordered
It can be done with adding short-circuit for OrderedDict class to
accept another OrderedDict instance.
> I could also see an argument for having this property for all dicts. There
> are many dictionaries that are never deleted from (probably most dict
> literals) and it would be nice to have an iteration order for them that
> matched the source code.
> However if deletions occur all bets would be off. If you need to maintain
> insertion order in the face of deletions, use an explicit ordereddict.
> Tim Delaney
> Python-Dev mailing list
> Python-Dev at python.org
More information about the Python-Dev