繁体   English   中英

如何在字典键中允许多余的字符

[英]How to allow for extra characters in dictionary keys

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

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

在拥有变量(例如数字)的情况下,是否有任何方法可以解释对键的引用?

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

我试图允许这样的变量,而不是剥离从引用到键的数字。 先感谢您。

那没有。 由于dict如何工作(作为哈希表 ),因此它们无法容纳您想要的内容。 您将必须创建自己的类型并定义__*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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM