如何将变量放入字典名称?

时间:2017-12-10 02:59:33

标签: python python-3.x python-2.7

我试图在其中创建一个带有变量的字典名称,以区分不同的词典。

我试过这个:

str(y) + dictionary['z'] = Z

但我得到了#SyntaxError:无法分配给运营商'

1 个答案:

答案 0 :(得分:0)

一种解决方案是使用SimpleNamespace模块中的空类或类似但稍微复杂的types

from types import SimpleNamespace

bag = SimpleNamespace()
bag.dict1 = {'somekey': 'somevalue'}
bag.dict2 = {'otherkey': 'othervalue'}

这在功能上大致相当于,但往往比使用bag字典更具可读性:比较bag.dict1['somekey']bag['dict1']['somekey']

另一个优点是自动填充程序通常支持属性但不支持字符串。因此,如果您在自动填充的shell或编辑器中 您可以输入bag.d,然后点击tab以获取bag.dict,但这不适用于bag['d

如果您需要文字字符串和字符串变量访问,则几乎为空的类更灵活:

class name_space:
    def __checkkey__(self, key):
        # better safe than sorry
        if key.startswith('_') or key.endswith('_') or not key.isidentifier():
            raise ValueError(f"Unsupported key: {key}")
    def __getitem__(self, key):
        self.__checkkey__(key)
        return self.__dict__.__getitem__(key)
    def __setitem__(self, key, value):
        self.__checkkey__(key)
        return self.__dict__.__setitem__(key, value)
    def __delitem__(self, key):
        self.__checkkey__(key)
        return self.__dict__.__delitem__(key)

现在你可以做到:

bag = name_space()
key = 'dict1'
bag[key] = {}
bag.dict1['somekey'] = 'somevalue'