我有一个代表字典中图层的列表:
layers = ('layer1', 'layer2', 'layer3')
我想动态创建一个如下所示的字典:
data = {'layer1': {'layer2': {'layer3': ...}}}
我希望能够在三个点的位置插入一个值。我还希望能够使用layers
列表动态访问此值。
答案 0 :(得分:0)
因此,当我输入这个问题时,我开始形成如何做到这一点的想法,然后我明白了。因此,为了将我的知识分享给任何可能需要它的人,这里就是。如果您了解更好的方法,欢迎您发布不同的解决方案!
def create_deep_dict(value, layers):
data = {}
layer = layers[0]
if layers[1:]:
data[layer] = create_deep_dict(value, layers[1:])
else:
data[layer] = value
return data
def deep_dict_value(data, layers):
layer = layers[0]
if layers[1:]:
return deep_dict_value(data[layer], layers[1:])
else:
return data[layer]
所以如果你使用这样的函数:
layers = ['layer1', 'layer2', 'layer3']
print 'create deep dict:'
data = create_deep_dict(layers, 'hello')
print data
print '\nretrieve value from deep dict:'
print deep_dict_value(layers, data)
将输出:
create deep dict:
{'layer1': {'layer2': {'layer3': 'hello'}}}
retrieve value from deep dict:
hello
答案 1 :(得分:0)
所以我做了一个替代解决方案,它使用for循环而不是递归调用函数。我对这两种方法进行了基准测试,并且随着您增加图层和函数调用的数量,循环方法变得更快。
def create_deep_dict(value, layers):
orig_data = {}
data = orig_data
last_layer = layers[-1]
for layer in layers[:-1]:
data[layer] = {}
data = data[layer]
data[last_layer] = value
return orig_data
def deep_dict_value(data, layers):
for layer in layers:
data = data[layer]
return data