[Python-Dev] d.get_key(key) -> key?
Daniel 'eikeon' Krech
eikeon@eikeon.com
05 Jun 2002 15:43:27 -0400
While attempting to "intern" the nodes in our rdflib's triple store I have come across the following question.
Is there or could there be an efficient way to get an existing key from a dictionary given a key that is == but whose id is not. For example:
given a==b and id(a)!=id(b) and d[a] = 1
what is the best way to:
d.get_key(b) -> a
--eikeon, http://eikeon.com/
PS: Here is the code where I am trying to get rid of multiple instances of equivalent nodes:
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/redfoot/rdflib-1.0/rdflib/store/memory.py?rev=1.1.1.1&content-type=text/vnd.viewcvs-markup
and a not so efficient first attempt:
# (could use a s.get(e2)->e1 as well given e1==e2 and id(e1)!=id(e2))
class Set(object):
def __init__(self):
self.__set = []
def add(self, obj):
e = self.get(obj)
if e: # already have equivalent element, so return the one we have
return e
else:
self.__set.append(obj)
return obj
def get(self, obj):
if obj in self.__set:
for e in self.__set:
if e==obj:
return e
return None
class Intern(object):
def __init__(self):
super(Intern, self).__init__()
self.__nodes = Set()
def add(self, subject, predicate, object):
subject = self.__nodes.add(subject)
predicate = self.__nodes.add(predicate)
object = self.__nodes.add(object)
super(Intern, self).add(subject, predicate, object)