2

私はデータ構造を歩いていて、X-> Y の dict マッピングを構築したいと考えています。ここで、X は私が歩いているデータ構造のフィールドであり、Y は私がその場で構築しているデータ構造のフィールドです。X はハッシュ不可能な型です。

4

4 に答える 4

1

dictハッシュ不可能なオブジェクトを別のオブジェクトでラップする場合、これには通常の Python を使用できます。具体的には、次のようなものです。

class Wrapper(object):
    def __init__(self, o):
        self.o = o

    def __hash__(self):
        return id(self.o)

    def __eq__(self, o):
        return hash(self) == hash(o)

次に、のように使用しsome_dict[Wrapper(unhashable_object)]ます。

id(o)これは、後でオブジェクト自体にもアクセスできるようにする必要がある場合に、単にキーとして使用するよりも便利なアプローチです(key.o明らかに のように)。そうでない場合 (ガベージ コレクションが問題にならない場合) は、それを使用してください。

于 2013-06-11T21:57:02.037 に答える
1

Java の IdentityHashMap の目的は、動的フィールドをシミュレートすることです。Python 言語はすでに動的属性を直接サポートしているため、マップは必要なく、Y を X の属性に割り当てるだけです。

x.someSuchRelation = y;
于 2013-06-11T21:35:41.817 に答える
0

自明:

idmap = {}
idmap[id(x)] = y

idofxを辞書キーとして使用する

于 2013-06-11T21:47:44.380 に答える