I have implemented a class in the C code of the collections module
which has similar behavior to the defaultdict class. This class,
dynamicdict, supplies values for keys that have not yet been added using
a default factory callable, but unlike defaultdict, the missing key
itself is passed to the callable. This code can be seen here:
https://github.com/swfarnsworth/cpython/blob/3.8/Modules/_collectionsmodule.c#L2234
While
this does introduce a lot of redundant code, I'm not sure how it could
be done without copying the implementation of the defaultdict class and
adjusting how the default factory is called. For example, I don't
believe that it's possible to support both behaviors within the
defaultdict class without breaking backwards compatibility or adding
another parameter to the constructor for the defaultdict class.
I
don't know if a PEP is needed for this to be added to the standard
library, or if it's something that anyone other than myself wants to see
added, but I would be happy to further explain the concept,
implementation, potential use cases, or anything else that might work
towards the adoption of this feature.
Regards,
Steele