1

我想创建一个函数,它将在 python 字典中创建动态嵌套级别。例如,如果我调用我的函数nesting,我想要如下输出:

nesting(1)  :  dict = {key1:<value>}
nesting(2)  :  dict = {key1:{key2:<value>}}
nesting(3)  :  dict = {key1:{key2:{key3:<value>}}}

等等。在调用此函数之前,我拥有所有键和值,但在我开始执行代码之前没有。

我将密钥存储在变量“m”中,其中 m 来自:

m=re.match(pattern,string)

该模式是针对这种情况动态构建的。

4

2 回答 2

1
def nesting(level, l=None):
    # assuming `m` is accessible in the function
    if l is None:
        l = level
    if level == 1:
        return {m[l-level]: 'some_value'}
    return {m[l-level]: nesting(level-1, l)

对于合理level的 s,这不会超过递归深度。这也假设该值始终相同并且m其形式为:

['key1', 'key2', ...]

这个函数的迭代形式可以写成这样:

def nesting(level):
    # also assuming `m` is accessible within the function
    d = 'some_value'
    l = level
    while level > 0:
        d = {m[l-level]: d}
        level -= 1
    return d

或者:

def nesting(level):
    # also assuming `m` is accessible within the function
    d = 'some_value'
    for l in range(level, 0, -1):  # or xrange in Python 2
        d = {m[l-level]: d}
    return d
于 2013-02-07T07:39:47.277 回答
1

您可以像这样遍历键:

def nesting(level):
    ret = 'value'
    for l in range(level, 0, -1):
        ret = {'key%d' % l: ret}
    return ret

range(...)片段替换为按所需顺序生成键的代码。因此,如果我们假设键是捕获的组,则应按如下方式更改函数:

def nesting(match): # `match' is a match object like your `m' variable
    ret = 'value'
    for key in match.groups():
        ret = {key: ret}
    return ret

或者reversed(match.groups()),如果您想以相反的顺序获取密钥,请使用。

于 2013-02-07T07:27:06.683 回答