假设我有一本这样的字典:
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
我试图允许这样一个变量,而不是从对键的引用中删除数字。先感谢您。
那没有。由于 dicts 的工作方式(作为哈希表),它们无法满足您的需求。您必须创建自己的类型并定义__*item__()
实现逻辑的方法。
在此答案的基础上,您可以定义自己的 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