3 回答

TA貢獻1826條經(jīng)驗 獲得超6個贊
您可以通過子類化dict并添加所需的邏輯來創(chuàng)建自己的字典類型。這是一個基本示例:
class TwoWayDict(dict):
def __setitem__(self, key, value):
# Remove any previous connections with these values
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):
dict.__delitem__(self, self[key])
dict.__delitem__(self, key)
def __len__(self):
"""Returns the number of connections"""
return dict.__len__(self) // 2
它的工作原理如下:
>>> d = TwoWayDict()
>>> d['foo'] = 'bar'
>>> d['foo']
'bar'
>>> d['bar']
'foo'
>>> len(d)
1
>>> del d['foo']
>>> d['bar']
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
KeyError: 'bar'
我確定我沒有涵蓋所有情況,但這應(yīng)該可以幫助您入門。

TA貢獻1785條經(jīng)驗 獲得超4個贊
在特殊情況下,您可以將兩者都存儲在一個字典中:
relation = {}
relation['Alice'] = 'Bob'
relation['Bob'] = 'Alice'
由于您要描述的是對稱關(guān)系。 A -> B => B -> A

TA貢獻1942條經(jīng)驗 獲得超3個贊
我知道這是一個比較老的問題,但是我想提一個解決這個問題的另一個好方法,就是python軟件包bidict。使用起來非常簡單:
from bidict import bidict
map = bidict(Bob = "Alice")
print(map["Bob"])
print(map.inv["Alice"])
添加回答
舉報