[Python-Dev] PEP 455: TransformDict

Steven D'Aprano steve at pearwood.info
Sat Sep 14 05:18:12 CEST 2013

On Sat, Sep 14, 2013 at 02:25:42AM +0100, MRAB wrote:
> On 14/09/2013 01:49, Steven D'Aprano wrote:

> >d = TransformDict(...)
> >for key in data:
> >     key = d.get_canonical(key)
> >     value = d[key]
> >     print("{}: {}".format(key, value))
> >
> I think must be missing something. I thought that iterating over the
> dict would yield the original keys, so if you wanted the original key
> and value you would write:
> for key, value in data.items():
>     print("{}: {}".format(key, value))

You're missing that I'm not iterating over the entire dict, just some 
subset ("data") that I got from elsewhere. In real code, of course I 
would have to handle missing keys. My gut feeling is that normally I 
would want both the canonical key and the value, not just any valid key:

# not this
for key in data:
    value = d[key]
    print("{}: {}".format(key, value))

# but this
for key in data:
    key, value = d.getitem(key)
    print("{}: {}".format(key, value))

but that's just a gut feeling, and I daresay that it would depend on the 

> and if you wanted the transformed key you would apply the transform
> function to the key.

The caller may not know or care what the transformation function is. The 
caller may only care about one or two things:

- does this key match a key in the dict?

- what is the canonical version of this key?

For example, in a case-preserving file system, the canonical version of 
a file name is whatever the user first typed when they created the file:

create file "SoMe FiLe"

so the canonical version is, "SoMe FiLe". But any of these may be 
expected to match:

some file
Some File

etc. It is *not* simply the case that the canonical version is "some 
file". Certainly that's not how case-preserving file systems work.


More information about the Python-Dev mailing list