[Python-Dev] Getting values stored inside sets (original) (raw)

Hrvoje Niksic hrvoje.niksic at avl.com
Mon Apr 6 13:37:15 CEST 2009


Raymond Hettinger wrote:

Hrvoje Niksic wrote:

I've stumbled upon an oddity using sets. It's trivial to test if a value is in the set, but it appears to be impossible to retrieve a stored value, See: http://code.activestate.com/recipes/499299/

Thanks, this is really good, the kind of idea that seems perfectly obvious once pointed out by someone else. :-) I'd still prefer sets to get this functionality so they can be used to implement, say, interning, but this is good enough for me.

In fact, I can derive from set and add a method similar to that in the recipe. It can be a bit simpler than yours because it only needs to support operations needed by sets (eq and hash), not arbitrary attributes.

class Set(set): def find(self, item, default=None): capt = _CaptureEq(item) if capt in self: return capt.match return default

class _CaptureEq(object): slots = 'obj', 'match' def init(self, obj): self.obj = obj def eq(self, other): eq = (self.obj == other) if eq: self.match = other return eq def hash(self): return hash(self.obj)

s = Set([1, 2, 3]) s.find(2.0) 2



More information about the Python-Dev mailing list