比方说,我有这样的词典:如何允许额外的字符在字典键
my_dict = {
hey: onevalue,
hat: twovalue,
how: threevalue
}
有没有办法考虑到一个关键的参考,同时具有可变,说在一个数字?
如my_dict [“HEY1”] = onevalue 或my_dict [“HEY2”] = onevalue
我试图以允许这样的变量,而不是从参考键剥离的数字。先谢谢你。
比方说,我有这样的词典:如何允许额外的字符在字典键
my_dict = {
hey: onevalue,
hat: twovalue,
how: threevalue
}
有没有办法考虑到一个关键的参考,同时具有可变,说在一个数字?
如my_dict [“HEY1”] = onevalue 或my_dict [“HEY2”] = onevalue
我试图以允许这样的变量,而不是从参考键剥离的数字。先谢谢你。
没有。由于如何工作(作为hash table),他们无法容纳你想要的东西。您将不得不创建自己的类型并定义实现逻辑的方法。
根据我在Python中的位置,在引用密钥之前剥离尾随字符会更不令人沮丧和更具教育意义。感谢您的快速回复! – numb3rs1x
建立在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
所以,当你有'hey1'或'hey2'这个键的时候,你想得到'onevalue'吗? – sberry
我不太确定我明白你在这里要做什么。忽略最后的数字以获取和设置? –
这对两者都是肯定的。我希望能够向密钥添加一个数字,并让它返回相同的值,而不管密钥是什么。 – numb3rs1x