[Python-Dev] PEP 455: TransformDict (original) (raw)

MRAB python at mrabarnett.plus.com
Sat Sep 14 03:25:42 CEST 2013


On 14/09/2013 01:49, Steven D'Aprano wrote:

On Fri, Sep 13, 2013 at 11:45:16PM +0200, Antoine Pitrou wrote:

Ok, I have a better (IMO) proposal:

>>> d = TransformDict(str.casefold, {'Foo': 1}) >>> d.getitem('foo') ('Foo', 1) >>> d.getitem('bar') Traceback (most recent call last): File "", line 1, in KeyError: 'bar' Is it more common to want both the canonical key and value at the same time, or to just want the canonical key? My gut feeling is that I'm likely to have code like this: d = TransformDict(...) for key in data: key = d.getcanonical(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))

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

in which case having a single call to return both will be great: for key in data: key, value = d.getitem(key) print("{}: {}".format(key, value))

but I'm really not sure. Maybe Ethan is right. I think these sorts of associated questions are why some people (Raymond, Nick) want to see the proposal live outside of the standard library for a while first. The general idea is great, but we're going to bike shed the API without having much idea of how it will actually be used. So, my suggestion is this: - Let's add transform to dicts for 3.4, similar to missing, and see how people end up using it in the real world. - Then, in 3.5, we can make a much better informed decision about the best API for a TransformedDict front-end to transform. +1 on transform method on dicts. +0 on TransformedDict in 3.4 +1 on waiting for 3.5 based on experience on using transform.



More information about the Python-Dev mailing list