[Python-Dev] Add a "transformdict" to collections
"Martin v. Löwis"
martin at v.loewis.de
Wed Sep 11 19:31:56 CEST 2013
Am 11.09.13 15:04, schrieb Antoine Pitrou:
> There are not many possible APIs to create case-insensitive dicts, or
> identity dicts.
That is certainly not true. Most obviously, you have the choice of a
specialized case-mapping dict, or a generalized type that can be used
for case mapping also. Does any of the referenced use cases actually
use the API that you are proposing (i.e. with a key transformation
function)?
FWIW, I can think of yet another API for this: write a Proxy class
class TransformedKey: # untested
def __init__(self, original):
self.original = original
self.transformed = self.transform(original)
def __hash__(self):
return hash(self.transformed)
def __eq__(self, other):
return self.transformed == other.transformed
def transform(self, key):
raise NotImplementedError
If there is then disciplined use in the form
d[TransformedKey(key)] == value
then you can use the existing dictionary type. Notice that this can do
both case-insensitive and identity dicts (plus there are multiple
choices of getting the transform function into it, as well as
variations of the __eq__ implementation).
There is evidence in this thread that people "grasp" case-insensitive
more easily than the generalized API. For the record, I initially typed
two responses into the tracker which I found to be incorrect before
posting them, so I ended up posting neither. The "transformdict" type
is not at all "natural", even though it may be useful.
If you really want to "push" this API into 3.4, I think you will need
to write a PEP, and find a PEP dictator who is willing to approve it.
As you seem to dislike the idea of writing a PEP, I suggest to follow
the idea of publishing it on PyPI now, and then proposing it for
inclusion into 3.5.
Regards,
Martin
More information about the Python-Dev
mailing list