On 9/12/2013 8:40 AM, Antoine Pitrou wrote:
Le Thu, 12 Sep 2013 08:05:44 -0700,
Ethan Furman <ethan@stoneleaf.us> a écrit :
On 09/12/2013 07:43 AM, Antoine Pitrou wrote:
Yeah, so this is totally silly. What you're basically saying is "we
don't need TransformDict since people can re-implement it
themselves".
No, what I'm saying is that the "case-preserving" aspect of
transformdict is silly.  The main point of transformdict is to
enable, for example, 'IBM', 'Ibm', and 'ibm' to all match up as the
same key.  But why?  Because you don't trust the user data.  And if
you don't trust the user data you have to add the correct version of
the key yourself before you ever process that data, which means you
already have the correct version stored somewhere.
That's assuming there is an a priori "correct" version. But there might
not be any. Keeping the original key is important for different reasons
depending on the use case:

- for case-insensitive dicts, you want to keep the original key for
  presentation, logging and debugging purposes (*)

- for identity dicts, the original key is mandatory because the id()
  value in itself is completely useless, it's just used for matching

 - for dict with non-hashable key, but a transform function that can derive a hashable key from it, the presentation key value may be much more complex than the actual key value.

(*) For a well-known example of such behaviour, think about Windows
filesystems.

Regards

Antoine.