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
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4