ネストされた辞書は内部の値に到達するために1つのキーだけを取るわけではないので、あなたが直接必要とするものを正確に行う方法はありません。いくつかのキーが必要です。しかし、必要ならタプルで複数のキーをまとめて保存することもできます。次に、ループ内の値を使用することができます(同じ深さにインデックスを付けるのではない場合)。または、展開していれば値を使用できます。
my_dict = {1: {2: 'A'}, 2: {3: 'B'}, 3: {4: 'C'}}
mymarker = (1, 2)
myothermarker = (2, 3)
a, b = mymarker # you can use unpacking when you know you're indexing to a specific depth
print(my_dict[a][b])
d = my_dict
for key in myothermarker: # or use a loop, for indexing to any depth
d = d[key]
print(d)
あなたは後で、あなたが可能なキーと一緒にset_marker
関数に渡す、とすることを、あなたはあなたの「マーカー」の値は、文字列になりたいとコメントしました:
このような何かを試してみてくださいset_with_marker
を呼び出して、メインディクショナリのキーで参照される値を変更します。上で説明した手法と組み合わせるのはそれほど難しくありませんが、文字列マーカーとそれらが参照するキーの間に入るためには、間接指定の追加レイヤーが必要です。 (my_dict
は、インスタンス属性である)
markers = {}
def set_marker(name, *keys):
markers[name] = keys # save the keys into the markers dict (as lists)
def get_with_marker(name):
d = my_dict
for key in markers[name]: # this is almost the same as the loop from above
d = d[key]
return d
def set_with_marker(name, value):
*keys, last = markers[name] # unpack last name separately from the others
d = my_dict
for key in keys: # this is similar to before, but we don't index the last level yet
d = d[key]
d[last] = value # we index the last level here, for the assignment
あなたは、これらの機能は、いくつかのクラスのメソッドになりたいことがあります。
は、ここであなたが欲しいものを行う必要があり、迅速、未テストの実装です。たくさんの場所にself
を追加する以外に、コードを大きく変更することはありません。
これらのマーカーが何をするために必要なのかについてもっと詳しく説明しなければなりません。彼らはなぜ文字列ですか? –
これは文字列なので、私のメソッドの1つにそれらを代入することができます。たとえば、set_marker( 'mymarker'、1,2) – user8927025