class _CaptureEq: 'Object wrapper that remembers "other" for successful equality tests.' def __init__(self, obj): self.obj = obj self.match = obj def __eq__(self, other): result = (self.obj == other) if result: self.match = other return result def __getattr__(self, name): # support hash() or anything else needed by __contains__ return getattr(self.obj, name) def get_equivalent(container, item, default=None): '''Gets the specific container element matched by: "item in container". Useful for retreiving a canonical value equivalent to "item". For example, a caching or interning application may require fetching a single representative instance from many possible equivalent instances). >>> get_equivalent(set([1, 2, 3]), 2.0) # 2.0 is equivalent to 2 2 >>> get_equivalent([1, 2, 3], 4, default=0) 0 ''' t = _CaptureEq(item) if t in container: return t.match return default import doctest print doctest.testmod()