कुछ इस तरह, शायद:
import itertools
class BidirDict(dict):
def __init__(self, iterable=(), **kwargs):
self.update(iterable, **kwargs)
def update(self, iterable=(), **kwargs):
if hasattr(iterable, 'iteritems'):
iterable = iterable.iteritems()
for (key, value) in itertools.chain(iterable, kwargs.iteritems()):
self[key] = value
def __setitem__(self, key, value):
if key in self:
del self[key]
if value in self:
del self[value]
dict.__setitem__(self, key, value)
dict.__setitem__(self, value, key)
def __delitem__(self, key):
value = self[key]
dict.__delitem__(self, key)
dict.__delitem__(self, value)
def __repr__(self):
return '%s(%s)' % (type(self).__name__, dict.__repr__(self))
आपको यह तय करना होगा कि यदि आप एक से अधिक कुंजी दिए गए मान के साथ क्या करना चाहते हैं; किसी दिए गए जोड़े की द्विदिशता को आपके द्वारा बाद में डाली गई कुछ जोड़ी द्वारा आसानी से बंद किया जा सकता है। मैंने एक संभव विकल्प लागू किया।
उदाहरण :
bd = BidirDict({'a': 'myvalue1', 'b': 'myvalue2', 'c': 'myvalue2'})
print bd['myvalue1']
print bd['myvalue2']