动态设置深python dict

时间:2013-11-12 18:34:56

标签: python dictionary

我有一个代表字典中图层的列表:

layers = ('layer1', 'layer2', 'layer3')

我想动态创建一个如下所示的字典:

data = {'layer1': {'layer2': {'layer3': ...}}}

我希望能够在三个点的位置插入一个值。我还希望能够使用layers列表动态访问此值。

2 个答案:

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