リストがあるとします
a = [3,4,1]
この情報で辞書を指すようにしたい:
b[3][4][1]
今、私が必要としているのはルーチンです。値を確認したら、b の位置内で値を読み書きします。
変数をコピーするのは好きではありません。変数 b の内容を直接変更したい。
リストがあるとします
a = [3,4,1]
この情報で辞書を指すようにしたい:
b[3][4][1]
今、私が必要としているのはルーチンです。値を確認したら、b の位置内で値を読み書きします。
変数をコピーするのは好きではありません。変数 b の内容を直接変更したい。
ネストされた辞書であると仮定するb
と、次のことができます
reduce(dict.get, a, b)
アクセスするb[3][4][1]
。
より一般的なオブジェクト タイプについては、
reduce(operator.getitem, a, b)
値の書き込みはもう少し複雑です。
reduce(dict.get, a[:-1], b)[a[-1]] = new_value
a
これはすべて、要素の数を事前に把握していないことを前提としています。もしそうなら、neves' answerで行くことができます。
これが基本的なアルゴリズムになります。
アイテムの値を取得するには:
mylist = [3, 4, 1]
current = mydict
for item in mylist:
current = current[item]
print(current)
アイテムの値を設定するには:
mylist = [3, 4, 1]
newvalue = "foo"
current = mydict
for item in mylist[:-1]:
current = current[item]
current[mylist[-1]] = newvalue
リストの長さが固定されており、既知であると仮定する
a = [3, 4, 1]
x, y, z = a
print b[x][y][z]
これを関数の中に入れることができます