我试图在其中创建一个带有变量的字典名称,以区分不同的词典。
我试过这个:
str(y) + dictionary['z'] = Z
但我得到了#SyntaxError:无法分配给运营商'
答案 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'
等