如何有效地提取python n-nested dict的叶子/分支值?

时间:2013-01-15 22:40:41

标签: python dictionary

我有一个nts的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']

真正嵌套的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])

是否有更高效的内存方法?

1 个答案:

答案 0 :(得分: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值。