[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