Một giải pháp khả thi khác là triển khai một lớp con của dict
, giữ từ điển gốc và theo dõi phiên bản ngược của nó. Việc giữ hai dấu riêng biệt có thể hữu ích nếu các khóa và giá trị chồng lên nhau.
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)
# The above is just an idea other methods
# should also be overridden.
Ví dụ:
>>> d = {'a' : 1, 'b' : 2} # suppose we need to use d and its reversed version
>>> twd = TwoWayDict(d) # create a two-way dict
>>> twd
{'a': 1, 'b': 2}
>>> twd.rev_dict
{1: 'a', 2: 'b'}
>>> twd['a']
1
>>> twd.rev_dict[2]
'b'
>>> twd['c'] = 3 # we add to twd and reversed version also changes
>>> twd
{'a': 1, 'c': 3, 'b': 2}
>>> twd.rev_dict
{1: 'a', 2: 'b', 3: 'c'}
>>> twd.pop('a') # we pop elements from twd and reversed version changes
>>> twd
{'c': 3, 'b': 2}
>>> twd.rev_dict
{2: 'b', 3: 'c'}
lưu ý rằng bạn đang mô tả một bản đồ sinh học. –
Nếu Alice đang nói chuyện với Bob, tôi lấy nó rằng cô ấy cũng không thể nói chuyện với Charles; Bob cũng không thể nói chuyện với bất kỳ ai khác? Ngoài ra, có bao nhiêu người và bạn có thể có bao nhiêu cuộc hội thoại tại bất kỳ thời điểm nào? –
Không ... không có trên tổng đài của tôi. Bất kỳ thông điệp nào mà alice gửi cho tôi sẽ phải đi tới Bob. Chỉ là tôi sẽ định tuyến hàng ngàn cuộc hội thoại đồng thời. Nhưng mỗi người chỉ nói chuyện với một người khác tại một thời điểm. –