双方向/逆マップ [重複] 質問する

双方向/逆マップ [重複] 質問する

私は Python でスイッチボードの作業を行っていますが、誰が誰と話しているのかを追跡する必要があるので、Alice --> Bob の場合、Bob --> Alice であることを意味します。

はい、2 つのハッシュ マップを設定することはできますが、1 つでそれを実行するアイデアを持っている人がいるかどうか疑問に思っています。

または、別のデータ構造を提案します。

複数の会話はありません。これはカスタマー サービス コール センター用だと仮定すると、アリスが交換機にダイヤルすると、ボブとだけ話すことになります。ボブの応答もアリスにのみ送信されます。

ベストアンサー1

dictサブクラス化して必要なロジックを追加することで、独自の辞書型を作成できます。基本的な例を次に示します。

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'

すべてのケースを網羅したわけではないと思いますが、これで始める準備はできたと思います。

おすすめ記事