Austin Bingham <austin.bing...@gmail.com> wrote: > If I understand things correctly, the set class uses hash() > universally to calculate hash values for its elements. Is there a > standard way to have set use a different function? Say I've got a > collection of objects with names. I'd like to create a set of these > objects where the hashing is done on these names. Using the __hash__ > function seems inelegant because it means I have to settle on one type > of hashing for these objects all of the time, i.e. I can't create a > set of them based on a different uniqueness criteria later. I'd like > to create a set instance that uses, say, 'hash(x.name)' rather than > 'hash(x)'. > > Is this possible? Am I just thinking about this problem the wrong way? > Admittedly, I'm coming at this from a C++/STL perspective, so perhaps > I'm just missing the obvious. Thanks for any help on this. >
It doesn't make sense to use just part of an object as the key for a set. A set is just a collection of values and there is no key separate from the value itself. If you build a set from x.name then that works fine, but only the names are stored. What you want in this particular case is a dict: a dict stores both a key and a value and lets you retrieve the value from the key. -- Duncan Booth http://kupuguy.blogspot.com -- http://mail.python.org/mailman/listinfo/python-list