Hello!

> If I have a simple dictionary, where the value is a class or function,
> is there an interface through which it can discover what its key is?

The key of a value may not be unique, so you can also get a tupe of
keys, like dict(a=1, b=1), the key's of 1 are a and b.

For unique values, I did something like that couple of weeks ago, the
thing you would need is the getKey thing, it's fast, but needs much
memory for big structures becouse I use two dicts.
If speed does not matter:

class ReverseDict(dict):
        def get_keys(self, value):
                keys = []
                for k, v in self.items():
                        if v == value: keys.append(k)
                return keys

class UniqueReverseDict(dict):
        """
        A dictionary that can resolute reverse: A object to a key. Both, the 
Key and
        the Value must be unique.
        """
        
        def __init__(self, **kws):
                super(UniqueReverseDict, self).__init__(kws)
                self.__reverse = {}

        def __setitem__(self, k, v):
                super(UniqueReverseDict, self).__setitem__(k, v)
                self.__reverse[v] = k
        
        def __update_reverse(self):
                self.__reverse.clear()
                for k, v in self.items():
                        self.__reverse[v] == k
        
        def has_value(self, v):
                return self.__reverse.has_key(v)
        
        def __delitem__(self, k):
                self.__reverse[self[k]] 
                super(UniqueReverseDict, self).__delitem__(k)

        def clear(self):
                self.__reverse.clear()
                super(UniqueReverseDict, self).clear()
                
        def copy(self):
                return UniqueReverseDict(self)
        
        def pop(self, k):
                del self.__reverse[self[k]]
                return self.pop(k)
        
        def popitem(self, **kws): 
                raise 'AxsPy.Misc.Structures.UniqueReverseDict', \
                        'NotImplemented'
        
        def setdefault(self, **kws): 
                raise 'AxsPy.Misc.Structures.UniqueReverseDict', \
                        'NotImplemented'
        
        def update(self, **kws):
                super(UniqueReverseDict, self).update(**kws)
                self.__update_reverse()
                
        def getKey(self, v): return self.__reverse[v]

Lg,
AXEL
-- 
"Aber naja, ich bin eher der Forentyp." Wolfibolfi's outing in 
http://www.informatik-forum.at/showpost.php?p=206342&postcount=10
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to