猿问

双向/反向映射

我正在python中进行此总机操作,我需要跟踪谁在跟谁说话,所以如果Alice-> Bob,则意味着Bob-> Alice。

是的,我可以填充两个哈希图,但是我想知道是否有人想使用一个哈希图。

或建议其他数据结构。

没有多个对话。假设这是用于客户服务呼叫中心的,所以当爱丽丝拨入总机时,她仅会与鲍勃交谈。他的答复也只发给她。



温温酱
浏览 496回答 3
3回答

跃然一笑

您可以通过子类化dict并添加所需的逻辑来创建自己的字典类型。这是一个基本示例:class TwoWayDict(dict):&nbsp; &nbsp; def __setitem__(self, key, value):&nbsp; &nbsp; &nbsp; &nbsp; # Remove any previous connections with these values&nbsp; &nbsp; &nbsp; &nbsp; if key in self:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; del self[key]&nbsp; &nbsp; &nbsp; &nbsp; if value in self:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; del self[value]&nbsp; &nbsp; &nbsp; &nbsp; dict.__setitem__(self, key, value)&nbsp; &nbsp; &nbsp; &nbsp; dict.__setitem__(self, value, key)&nbsp; &nbsp; def __delitem__(self, key):&nbsp; &nbsp; &nbsp; &nbsp; dict.__delitem__(self, self[key])&nbsp; &nbsp; &nbsp; &nbsp; dict.__delitem__(self, key)&nbsp; &nbsp; def __len__(self):&nbsp; &nbsp; &nbsp; &nbsp; """Returns the number of connections"""&nbsp; &nbsp; &nbsp; &nbsp; 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):&nbsp; File "<stdin>", line 7, in <module>KeyError: 'bar'我确定我没有涵盖所有情况,但这应该可以帮助您入门。

九州编程

在特殊情况下,您可以将两者都存储在一个字典中:relation = {}relation['Alice'] = 'Bob'relation['Bob'] = 'Alice'由于您要描述的是对称关系。 A -> B => B -> A

手掌心

我知道这是一个比较老的问题,但是我想提一个解决这个问题的另一个好方法,就是python软件包bidict。使用起来非常简单:from bidict import bidictmap = bidict(Bob = "Alice")print(map["Bob"])print(map.inv["Alice"])
随时随地看视频慕课网APP

相关分类

Python
我要回答