0

我有一个 n 层的 dicts 字典,并希望通过一系列键获取叶值。

所以:

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']

真正的嵌套字典非常大,所以我想避免这样的事情:

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

是的,不要创建这么多副本。只需引用 subdict :

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 回答