python字典的递归深度

2024-04-25 22:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

今天

我试图找到一个函数的递归深度,这个函数拖网查字典,我有点迷路了。。。 目前我有一些东西像:

myDict = {'leve1_key1': {'level2_key1': {'level3_key1': {'level4_key_1': {'level5_key1':   'level5_value1'}}}}}

我想知道最嵌套的字典是如何嵌套的。。。所以我要做的是。。。

def dict_depth(d, depth):

    for i in d.keys():
        if type(d[i]) is dict:
            newDict = d[i]
            dict_depth(newDict, depth+1)
    return depth

print dict_depth(myDict, 0)

唯一的问题是,递归循环只返回最终值(0)。 如果我写一份书面声明 for i in d.keys():然后我至少可以打印递归的最高值,但是返回值是另一回事。。。

我确信这很简单-我只是有点神经质。

干杯


Tags: 函数inforkeysdictmydictkey1depth
3条回答
MyDict = {'a': {'a1': {'a11': 5, 'a12':[{2:'a22'}], 'a13':{'a14':'a11'}}, 'a2': 6}, 'b':{7:{8:{9:{10:{11:'11'}}}}}, 'c': {'c1': 18, 'c2': 1}}

def find_depth(dep,val):
    if isinstance(val,dict):
        dep=dep+1
        for j in val:
            find_depth(dep,val[j])
        temp_depth.append(dep)
        dep=0
        return max(temp_depth)
    elif isinstance(val,list):
        for k in val:
            find_depth(dep,k)


max_depth={}
for i in MyDict:
    dep=0
    temp_depth=[]
    max_depth.update({i:(find_depth(dep,MyDict[i]))})
    print max_depth

这里的代码工作良好,如果连列表也包括在内。

确保将递归调用的结果分配给深度。另外,正如@amit所说,考虑使用max以便可以处理具有多个键值对(树状结构)的dict。

def dict_depth(d, depth=0):
    if not isinstance(d, dict) or not d:
        return depth
    return max(dict_depth(v, depth+1) for k, v in d.iteritems())

>>> myDict = {'leve1_key1': {'level2_key1': 
               {'level3_key1': {'level4_key_1': 
                  {'level5_key1':   'level5_value1'}}}}}
>>> dict_depth(myDict)
5

您应该存储从递归调用中返回的值,并返回找到的最大值,否则-您调用递归函数时不会对返回值执行任何操作![并按预期返回0,因为它从未更改]

def dict_depth(d, depth):
    ret = depth 
    for i in d.keys():
        if type(d[i]) is dict:
            newDict = d[i]
            ret = max(dict_depth(newDict, depth+1),ret) #finding max and storing it
    return ret #returning the max found

相关问题 更多 >