Кажется, что вы могли бы получить пользу от создания своего словаря "Симметричный", вы могли бы сделать что-то вроде этого:
def make_symmetric(D):
for key, value in D.items():
for v in value:
D.setdefault(v, set()).add(key)
def add(D, a, b):
D.setdefault(a, set()).add(b)
D.setdefault(b, set()).add(a)
def remove(D, a):
values = D.pop(a)
for v in values:
D[v].remove(a)
И используйте это как-то так:
>>> d = {'a': set([1, 2, 3, 4]),
'b': set([1, 2, 3, 4, 5, 6]),
'c': set([1, 2]),
'd': set([1, 4])}
>>> make_symmetric(d)
>>> d
{1: set(['a', 'c', 'b', 'd']),
2: set(['a', 'c', 'b']),
3: set(['a', 'b']),
4: set(['a', 'b', 'd']),
5: set(['b']),
6: set(['b']),
'a': set([1, 2, 3, 4]),
'b': set([1, 2, 3, 4, 5, 6]),
'c': set([1, 2]),
'd': set([1, 4])}
>>> remove(d, 4)
>>> d
{1: set(['a', 'c', 'b', 'd']),
2: set(['a', 'c', 'b']),
3: set(['a', 'b']),
5: set(['b']),
6: set(['b']),
'a': set([1, 2, 3]),
'b': set([1, 2, 3, 5, 6]),
'c': set([1, 2]),
'd': set([1])}
>>> add(d, 'd', 4)
>>> d
{1: set(['a', 'c', 'b', 'd']),
2: set(['a', 'c', 'b']),
3: set(['a', 'b']),
4: set(['d']),
5: set(['b']),
6: set(['b']),
'a': set([1, 2, 3]),
'b': set([1, 2, 3, 5, 6]),
'c': set([1, 2]),
'd': set([1, 4])}
Я использую наборы здесь, но вы можете сделать что-то подобное со списками. Я не удивлюсь, если уже где-нибудь будет реализована «симметричная» версия словаря. Надеюсь, кто-то еще может указать вам правильное направление, если оно существует.