2013-07-25 58 views
0

比方說,我有這樣的詞典:如何允許額外的字符在字典鍵

my_dict = { 
      hey: onevalue, 
      hat: twovalue, 
      how: threevalue 
      } 

有沒有辦法考慮到一個關鍵的參考,同時具有可變,說在一個數字?

如my_dict [「HEY1」] = onevalue 或my_dict [「HEY2」] = onevalue

我試圖以允許這樣的變量,而不是從參考鍵剝離的數字。先謝謝你。

+0

所以,當你有'hey1'或'hey2'這個鍵的時候,你想得到'onevalue'嗎? – sberry

+0

我不太確定我明白你在這裏要做什麼。忽略最後的數字以獲取和設置? –

+0

這對兩者都是肯定的。我希望能夠向密鑰添加一個數字,並讓它返回相同的值,而不管密鑰是什麼。 – numb3rs1x

回答

0

沒有。由於如何工作(作爲hash table),他們無法容納你想要的東西。您將不得不創建自己的類型並定義實現邏輯的方法。

+0

根據我在Python中的位置,在引用密鑰之前剝離尾隨字符會更不令人沮喪和更具教育意義。感謝您的快速回復! – numb3rs1x

0

建立在this answer上,您可以定義自己的dict兼容類型去除尾隨數字;

import collections 

class TransformedDict(collections.MutableMapping): 
    """A dictionary which applies an arbitrary key-altering function before accessing the keys""" 

    def __init__(self, *args, **kwargs): 
     self.store = dict() 
     self.update(dict(*args, **kwargs)) # use the free update to set keys 

    def __getitem__(self, key): 
     return self.store[self.__keytransform__(key)] 

    def __setitem__(self, key, value): 
     self.store[self.__keytransform__(key)] = value 

    def __delitem__(self, key): 
     del self.store[self.__keytransform__(key)] 

    def __iter__(self): 
     return iter(self.store) 

    def __len__(self): 
     return len(self.store) 

    def __keytransform__(self, key): 
     for i in xrange(len(key)-1,-1,-1): 
      if not key[i].isdigit(): 
      break 
     return key[:i] 

a = TransformedDict() 
a['hello'] = 5 
print a['hello123'] 

>>> 5