如何找到Python中有多少级别的字典

时间:2017-04-24 11:59:38

标签: python dictionary

例如:

d = {1:{'name':'x', 'age':24, 'address':{'country':'zzz', 'zip':12345}}, 2:{'name':'y', 'age':21, 'address':{'country':'yyy', 'zip':54321}}, 3:{'name':'z', 'age':25}}

我们如何以优化的方式找到我们在那里有最多3层(字典内的字典)的字典。

2 个答案:

答案 0 :(得分:4)

为字典计数1,否则为0,并采取"最坏情况"所有字典值:

my_dict = {1:{'name':'x', 'age':24, 'address':{'country':'zzz', 'zip':12345}}, 2:{'name':'y', 'age':21, 'address':{'country':'yyy', 'zip':54321}}, 3:{'name':'z', 'age':25}}

def count(d):
    return max(count(v) if isinstance(v,dict) else 0 for v in d.values()) + 1

print(count(my_dict))

我得到3

答案 1 :(得分:1)

您可以使用递归函数来查找嵌套字典的最大深度:

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

这给出了预期的输出:

depth(d) # 3

感谢@tobias_k建议采用简化方法。

请注意,上面的函数为空字典提供了0深度(这就是我检查if d)的原因。这对我来说过去很有用,但我认为这是一种惯例。