อีกวิธีหนึ่งที่เป็นไปได้คือการใช้คลาสย่อยdictที่มีพจนานุกรมต้นฉบับและติดตามเวอร์ชันที่กลับรายการ การเก็บคำสั่งแยกจากกันจะมีประโยชน์หากคีย์และค่าทับซ้อน
class TwoWayDict(dict):
def __init__(self, my_dict):
dict.__init__(self, my_dict)
self.rev_dict = {v : k for k,v in my_dict.iteritems()}
def __setitem__(self, key, value):
dict.__setitem__(self, key, value)
self.rev_dict.__setitem__(value, key)
def pop(self, key):
self.rev_dict.pop(self[key])
dict.pop(self, key)
ตัวอย่าง:
>>> d = {'a' : 1, 'b' : 2}
>>> twd = TwoWayDict(d)
>>> twd
{'a': 1, 'b': 2}
>>> twd.rev_dict
{1: 'a', 2: 'b'}
>>> twd['a']
1
>>> twd.rev_dict[2]
'b'
>>> twd['c'] = 3
>>> twd
{'a': 1, 'c': 3, 'b': 2}
>>> twd.rev_dict
{1: 'a', 2: 'b', 3: 'c'}
>>> twd.pop('a')
>>> twd
{'c': 3, 'b': 2}
>>> twd.rev_dict
{2: 'b', 3: 'c'}