[Python-Dev] Proposal: add odict to collections
Barry Warsaw
barry at python.org
Sun Jun 15 14:01:40 CEST 2008
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On Jun 15, 2008, at 1:43 AM, Raymond Hettinger wrote:
> 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)]
>
> The first maintains the original sort order and is consistent with
> the usual
> idea that d[k]=v simply replaces the value but does not alter the
> hash table.
> It is a bit weird though because v3 appears earlier than v2 which was
> inserted earlier. It's especially weird for keys that are equal but
> not
> identical: d[0]=v1 d[0.0]=v3. Do you want 0.0 to remain associated
> with v3 or should the items list contain a pair that was not in the
> original
> insertion list, (0, v3)?
>
> The second one is a bit weird because a key "loses its place" whenever
> the value is updated.
Heh, neither of these would work for the email package's own flavor of
"ordered" dictionary. Its .items() will return all three key/val
pairs, but it's __getitem__ interface would only return the first two,
and there are additional interfaces exposed for .get_all() (which is
like .get() but returns a list of values matching the given key).
Okay, so email couldn't use whatever stdlib odict gets added, but I
think that just shows that this may not be as fundamental a data
structure as we think it is. I'd much rather see a package on the
cheeseshop gain overwhelming popularity, practically forcing us to
include it in the stdlib.
- -Barry
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Darwin)
iQCVAwUBSFUEpHEjvBPtnXfVAQIj9QQAtuvlC5YtcSBsddztqD8kwokSrvKz7Nef
oM0JpxjVBQ7oT0F9MnWEvu9Rf8aTVdXsR/zWTf0yw1jt4HtM50Yu4RGqyjghFJ/Z
+Gz+hAqyCerJE6Y9AlW4UdJbQ47wD/Sp1AbMafHCubbt3Sp1AxKmr1tN84WAFefw
8rkP6LbpP64=
=dwAi
-----END PGP SIGNATURE-----
More information about the Python-Dev
mailing list