2016-12-30 95 views
1

我是Python的新手,試圖創建一個從字典繼承的類,同時具有屬性名稱reversemap。 reversemap屬性是另一個包含主字典中值的鍵的字典。例如如下: -Python在從字典繼承的類中添加反向映射字典屬性

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] 

當試圖分配一個給HH [「1」]將拋出錯誤,指出 self.reversemap [項目] =鍵 AttributeError的:「DictWithReverseMap」對象沒有屬性'反向映射'

任何想法?謝謝。

回答

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

一個鍵在字典中不能有2個值。但是你可以改變你的方式來使用列表。 –