[Python-Dev] Getting values stored inside sets (original) (raw)
Terry Reedy tjreedy at udel.edu
Fri Apr 3 14:26:02 CEST 2009
- Previous message: [Python-Dev] Getting values stored inside sets
- Next message: [Python-Dev] Getting values stored inside sets
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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,
Set elements, by definition, do not have keys or position by which to grab. When they do, use a dict or list.
other than by iterating over the whole set. Let me describe a concrete use case.
Imagine a set of objects identified by some piece of information, such as a "key" slot (guaranteed to be constant for any particular element). The object could look like this: class Element(object): def init(self, key): self.key = key def eq(self, other): return self.key == other def hash(self): return hash(self.key) # ... Now imagine a set "s" of such objects. I can add them to the set: >>> s = set() >>> s.add(Element('foo')) >>> s.add(Element('bar')) I can test membership using the keys: >>> 'foo' in s True >>> 'blah' in s False But I can't seem to find a way to retrieve the element corresponding to 'foo', at least not without iterating over the entire set. Is this an oversight or an intentional feature? Or am I just missing an obvious way to do this?
Use a dict, like you did.
I know I can work around this by changing the set of elements to a dict that maps key -> element, but this feels unsatisfactory.
Sorry, that is the right way.
It's redundant, as the element already contains all the necessary information,
Records in a database have all the information of the record, but we still put out fields for indexes.
tjr
- Previous message: [Python-Dev] Getting values stored inside sets
- Next message: [Python-Dev] Getting values stored inside sets
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]