2016-12-30 3 views
1

私はPythonには新しく、辞書から継承したクラスを作成しようとしていましたが、同時に属性名の反転マップを持っていました。 reversemap属性は、メイン辞書の値のキーを含む別の辞書です。以下のように例: - :「DictWithReverseMap」オブジェクトが何を持っている私はHH [「1」]に代入しようとすると、それは self.reversemap [アイテム] =キー はAttributeErrorがあることを知らせるないエラーをスローします辞書から継承したクラスに逆マップ辞書属性を追加する

class DictWithReverseMap(dict): 
    def __init__(self): 
    self.reversemap = dict() 
    self.__dict__ = dict() 
    def __setitem__(self, key, item): 
    self.__dict__[key] = item 
    self.reversemap[item] = key 

hh= DictWithReverseMap() 
hh['1'] = "a" 
hh['2'] = "a" 
hh['3'] = "b" 

print hh[1] #result [a] 
print hh.reversemap[b] #result [3] 

属性 'reversemap'

すべてのアイデア?ありがとう。

答えて

1

スーパークラス(dict)の関数を使用しませんでした。それを実装する方法です

class DictWithReverseMap(dict): 
    def __init__(self): 
    super(DictWithReverseMap, self).__init__() 
    self.reversemap = dict() 
    def __setitem__(self, key, item): 
    super(DictWithReverseMap, self).__setitem__(key, item) 
    self.reversemap[item] = key 

hh= DictWithReverseMap() 
hh['1'] = "a" 
hh['2'] = "a" 
hh['3'] = "b" 

print hh.keys() 
print hh['1'] # Remember to use quote around the number 1 
print hh.reversemap['b'] # Remember to use quote around the letter b 
+0

ありがとうございます! hh.reversemap ['a']を印刷するのはなぜ2を返すのかというもう一つの疑問です。それは1と2の両方を正しく返しますか? – VeecoTech

+0

1つのキーは1つの辞書に2つの値を持つことはできません。しかし、代わりにリストを使用するあなたのアプローチを変更することができます。 –

関連する問題