[OK]をので、私はそれがアイテムのリンクにアクセスしようとしたときを除いて素晴らしい作品、データを介してデータにアクセスする際に使用するため__getitem__
機能を持っている私自身の変数のハンドラ[キー]を構築しました:Python - 辞書 - __getitem__を修正しますか?
data["key"]["subkey"]
def __getitem__(self, key, **args):
print key
...
return self.dict[key]
存在しないサブキーにアクセスしようとすると、Pythonは "サブキー"を印刷せずにKeyErrorを返すだけですが、これはなぜですか、そして私が実際に得ようとしているものを印刷するにはどうしたらよいですか?
私はおそらくメカニックを誤解していると知っていますが、辞書をエミュレートし、要求されているデータ列に従う方法がありますか?主に私は動的辞書フローの不足している変数を記録することができ ...
明らかにこれは動作します(しかし、それは私が好きなネイティブ構文ではありません):
data["key:subkey"]
def __getitem__(self, key, **args):
for slice in key.split(':'):
print key
...
目的は以下をエミュレートすることです、
作品:
data = {'key' : {'subkey' : 1}}
print data["key"]["subkey"]
は動作しませんが、私は__getitem__
内の例外をキャッチして、マイルを作成したいです
data = {'key' : {}}
print data["key"]["subkey"]
ソリューション:
class Var():
def __init__(self):
self.dict = {'test' : {}}
def __getitem__(self, var, **args):
print ':',var
if var in self.dict:
v = Var(self.dict[var])
return v
print vHandle['test']['down']
出力:
:テスト
:
ダウンssingキーは自動的に、または単に不足しているサブキーを記録しますなし
私はここに何かを見逃しているのですか?またはこれは全くdownvoteに値しませんでしたか? downvoterは自分自身を説明できますか? – Polynomial
'データ 'の種類は何ですか? 'data [" key "]'の型は何ですか?おそらくもっとコードを表示する必要があります。そうでなければ、私たちができることは推測です。 (私のdownvoteではありません) –
いいえ、あなたはそれを直接行うことはできません(あなたは同じ細かい処理をしたラップされたオブジェクトを返すことができます)。このように考えると、 '_ = data ['key']'の後に '_ ['subkey']'が続きます。代わりに 'data ['key'、 'subkey']'(タプルキー)がデータにアクセスするための有効な方法であればそれを使うことができます。 –