1. ホーム
  2. python

[解決済み] 2ウェイ/リバースマップ[重複]について

2022-05-18 05:31:06

質問

もしアリスが --> ボブなら、ボブは --> アリスであることを意味します。

はい、私は2つのハッシュマップを入力することができましたが、私は誰かがそれを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'

すべてのケースをカバーしたわけではありませんが、これで始めることができるでしょう。