2

任意のディクショナリ キーを使用してメタデータを格納inし、元のオブジェクト タイプでテストに合格できるクラスを作成しました。

class DictKey:

    def __init__(self, key):
        self.hashkey = hash(key)
        self.member = key

    def __hash__(self):
        return self.hashkey

    def __repr__(self):
        return 'DictKey(' + self.strkey + ')'

    def __cmp__(self, o):
        return cmp(self.member, o)

d = {}
key = DictKey('hello')
d[key] = 'world'

print key.hashkey
print hash('hello')
print key in d
print 'hello' in d
print DictKey('hello') in d

出力を生成します:

840651671246116861
840651671246116861
True
True
True

ここで、文字列「hello」が与えられた場合、その文字列から一定時間で作成された DictKey のインスタンスを取得する必要があります。

if 'hello' in d:
    #need some way to return the instance of DictKey so I can get at it's member
    tmp = d.getkey('hello') 
    tmp.member
4

2 に答える 2

2

辞書とともに「メタ」データを保存するより従来の方法は、次のいずれかです。

  1. 同じキー セットで2 つの を維持するdictには、1 つは実際のデータ用、もう 1 つは「メタ」用です。
  2. (「生の」)キーを持ちdict、値は2タプルです:(値、アイテムメタデータ)

どちらもシンプルで、特別な魔法は必要ありません。また、質問で説明したような問題(および今後発生する他の問題)も回避できます。

于 2013-03-29T16:57:50.607 に答える
0

基本コードにわずかな変更を加えました。

def __repr__(self):
    return 'DictKey(' + self.member + ')'

次に、キーのセットで DictKey のインスタンスを取得する場合は、次のようにします。

index_of_instance = d.keys().index('hello')
my_instance_of_dict_key = d.keys()[index_of_instance]

それが役に立てば幸い。

于 2013-03-29T16:48:35.793 に答える