0

假设我有一本这样的字典:

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

有没有办法在有变量时解释对键的引用,比如一个数字?

例如 my_dict['hey1'] = onevalue 或 my_dict['hey2'] = onevalue

我试图允许这样一个变量,而不是从对键的引用中删除数字。先感谢您。

4

2 回答 2

0

那没有。由于 dicts 的工作方式(作为哈希表),它们无法满足您的需求。您必须创建自己的类型并定义__*item__()实现逻辑的方法。

于 2013-07-25T05:42:13.240 回答
0

此答案的基础上,您可以定义自己的 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
于 2013-07-25T05:54:40.650 回答