0

dictのn層のdictがあり、特定の一連のキーによってリーフ値を取得したいと考えています。

それで:

example_dict = {'level_one':
    {'level_two_a':
        {'level_three_a':[1,2,3], 
         'level_three_b':[4,5,6]
        }, 
     'level_two_b':
        {'level_three_c':[7,8,9], 
         'level_three_d':[10,11,12]
        }
    }
}

時々私は質問したいと思うでしょう:

example_dict['level_one']['level_two_a']['level_three_a']

それ以外の場合:

example_dict['level_one']['level_two_b']

実際のネストされたdictは非常に大きいので、次のようなものは避けたいと思います。

result_dict = copy.deepcopy(example_dict)
search_key = ['level_one', 'level_two_a']
for term in search_key:
 result_dict = copy.deepcopy(result_dict[term])

よりメモリ効率の良い方法はありますか?

4

1 に答える 1

1

はい、それほど多くのコピーを作成しないでください。サブディクトを参照するだけです。

result = example_dict
search_key = ['level_one', 'level_two_a']
for term in search_key:
    result = result[term]

口述を変更しない限りresult、コピーを作成することは無意味です。以前のコピーを破棄し、反復ごとに新しいコピーを作成するため、メモリだけでなくCPU時間も無駄になります。

result変更する必要があり、それらの変更に影響を与えたくない場合でも、ループ後example_dictに最終値をコピーするだけで済みます。result

于 2013-01-15T22:54:31.423 に答える