-2
私は、さまざまな辞書を区別するために変数に辞書名を入れようとしています。辞書名にどのように変数を入れるのですか?
私はこれ試してみた:
str(y) + dictionary['z'] = Z
を私は「にSyntaxError:オペレータに割り当てることはできません」を取得
私は、さまざまな辞書を区別するために変数に辞書名を入れようとしています。辞書名にどのように変数を入れるのですか?
私はこれ試してみた:
str(y) + dictionary['z'] = Z
を私は「にSyntaxError:オペレータに割り当てることはできません」を取得
一つの解決策は、空のクラスまたは類似しているが、もう少し洗練されたを使用することですtypes
モジュールのSimpleNamespace
。
from types import SimpleNamespace
bag = SimpleNamespace()
bag.dict1 = {'somekey': 'somevalue'}
bag.dict2 = {'otherkey': 'othervalue'}
等
これは、機能的にほぼ同等であるが、もう少し可読bag
ために辞書を使用するよりなる傾向にある:比較bag.dict1['somekey']
bag['dict1']['somekey']
の別の利点は、autocompletersは、典型的にサポートすることです文字列ではありません。あなたは自動補完 とシェルやエディタにあるのであれば、あなたは
bag.d
を入力して
bag.dict
を取得するために
tab
を打つが、これはリテラル文字列と文字列変数の両方によるアクセスが必要な場合は、ほとんど空のクラスがある
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'
など
これは何をすると思われますか? – Sebastian
すべての辞書を辞書に入れて、文字列を使って検索することができます。 – ekhumoro
正確には、エコモロ。 Bob、このような変数を動的に作成しないでください。これがデータ構造の目的です。 –