[Python-ideas] An identity dict
Daniel Stutzbach
daniel at stutzbachenterprises.com
Sun May 30 21:37:18 CEST 2010
On Sun, May 30, 2010 at 6:34 AM, Antoine Pitrou <solipsis at pitrou.net> wrote:
> Perhaps it would be more useful to add a generic
> collections.keyfuncdict, taking a function which applied to a key
> gives the real key value used for lookups.
> Your identity dict would be created as:
> d = collections.keyfuncdict(id)
>
For what it's worth, my sorteddict class (part of the blist library) already
supports exactly that syntax. The full signature is:
sorteddict([key[, arg]], **kw)
where "arg" and "kw" do exactly what they do for dict(), and "key" specifies
a key function just as in your example. (Although now that I think about
it, perhaps "arg" and "key" should be reversed to more closely match the
signature of dict())
Example usage:
>>> from blist import sorteddict
>>> d = sorteddict(id)
>>> d[(1,2)] = True
>>> d[(1,2)] = True
>>> d.keys()
[(1, 2), (1, 2)]
I'm not suggesting that Benjamin use sorteddict for his use-case, since
keeping the keys sorted by id() is probably not useful. ;-)
In some ways it would be nice if dict() itself accepted a "key" function as
an argument, but I don't see a way to provide that functionality without
adding another field to PyDictObject (yuck) or abusing the ma_lookup field
(again, yuck).
I favor adding the more general keyfuncdict over identitydict.
--
Daniel Stutzbach, Ph.D.
President, Stutzbach Enterprises, LLC <http://stutzbachenterprises.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20100530/04f719f6/attachment.html>
More information about the Python-ideas
mailing list