Борислав обнови решението на 19.04.2012 13:15 (преди над 12 години)
+import collections
+class BiDict(dict):
+ def __init__(self, dictionary):
+ self.update(dict(dictionary))
+ def __setitem__ (self, key, value):
+ if value in list(self.values()):
+ self.inverse()
+ super(BiDict, self).__setitem__(value, key)
+ self.inverse()
+ if not value.__hash__:
+ raise TypeError("unhashable type")
+ elif value not in list(self.values()):
+ super(BiDict, self).__setitem__(key, value)
+ def inverse(self):
+ invertse_copy = dict([[v,k] for k,v in self.items()])
+ super(BiDict,self).clear()
+ super(BiDict,self).update(invertse_copy)
+ def setdefault(self, key, value = None):
+ if key not in self.keys():
+ self[key] = value
+ return value
+ else:
+ return self[key]
+ def update(self, dictionary = None, **kwarg):
+ if isinstance(dictionary, dict):
+ for key in dictionary.keys():
+ self[key] = dictionary[key]
+ elif isinstance(dictionary, collections.Iterable):
+ for (key, value) in dictionary:
+ self[key] = value
+ else:
+ for key in kwarg:
+ self[key] = kwarg[key]
+ return None