2013-07-25 25 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