[Python-Dev] The current dict is not an "OrderedDict"
Steven D'Aprano
steve at pearwood.info
Tue Nov 7 09:56:42 EST 2017
On Tue, Nov 07, 2017 at 03:32:29PM +0100, Antoine Pitrou wrote:
[...]
> > "Insertion ordered until the first key removal" is the only guarantee
> > that's being proposed.
>
> Is it? It seems to me that many arguments being made are only relevant
> under the hypothesis that insertion is ordered even after the first key
> removal. For example the user-friendliness argument, for I don't
> think it's very user-friendly to have a guarantee that disappears
> forever on the first __del__.
Don't let the perfect be the enemy of the good.
For many applications, keys are never removed from the dict, so this
doesn't matter. If you never delete a key, then the remaining keys will
never be reordered.
I think that Nick's intent was not to say that after a single deletion,
the ordering guarantee goes away "forever", but that a deletion may be
permitted to reorder the keys, after which further additions will honour
insertion order. At least, that's how I interpret him.
To clarify: if we start with an empty dict, add keys A...D, delete B,
then add E...H, we could expect:
{A: 1}
{A: 1, B: 2}
{A: 1, B: 2, C: 3}
{A: 1, B: 2, C: 3, D: 4}
{D: 4, A: 1, C: 3} # some arbitrary reordering
{D: 4, A: 1, C: 3, E: 5}
{D: 4, A: 1, C: 3, E: 5, F: 6}
{D: 4, A: 1, C: 3, E: 5, F: 6, G: 7}
{D: 4, A: 1, C: 3, E: 5, F: 6, G: 7, H: 8}
Nick, am I correct that this was your intent?
--
Steve
More information about the Python-Dev
mailing list