如何在字典名称中输入变量?

2024-04-25 21:54:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着用一个变量来命名字典,以区分不同的字典。你知道吗

我试过这个:

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

但我得到“SyntaxError:无法分配给运算符”


Tags: dictionary字典运算符命名区分strsyntaxerror
1条回答
网友
1楼 · 发布于 2024-04-25 21:54:38

一种解决方案是使用空类或类似但稍微复杂的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'

等等

相关问题 更多 >