📜  Python|查找字典的深度

📅  最后修改于: 2022-05-13 01:55:14.174000             🧑  作者: Mango

Python|查找字典的深度

先决条件:嵌套字典

任务是在Python中找到给定字典的深度。让我们讨论完成此任务的所有不同方法。

例子:

Input : {1:'a', 2: {3: {4: {}}}}
Output : 4

Input : {'a':1, 'b': {'c':'geek'}}
Output : 3

方法#1:朴素的Alpproach

为了找到字典的深度,一种简单的方法是计算左花括号的数量。但是,这种方法的一个缺点是它只有在输入正确的情况下才有效。

# Python3 Program to find depth of a dictionary
def dict_depth(dic, level = 1):
       
    str_dic = str(dic)
    counter = 0
    for i in str_dic:
        if i == "{":
            counter += 1
    return(counter)
   
# Driver code 
dic = {1:'Geek', 2: {3: {4: {}}}}
print(dict_depth(dic))
输出:
4


方法 #2:使用递归

在这种方法中,我们使用带有 max()函数的递归,该函数在每个级别的审查下为当前字典选择最大深度。

# Python3 Program to find depth of a dictionary
def dict_depth(dic, level = 1):
      
    if not isinstance(dic, dict) or not dic:
        return level
    return max(dict_depth(dic[key], level + 1)
                               for key in dic)
  
# Driver code 
dic = {1:'a', 2: {3: {4: {}}}}
  
print(dict_depth(dic))
输出:
4

递归解决方案的另一个版本是使用 map()函数,通过该函数将内部字典的值映射到被调用的函数。

# Python3 Program to find depth of a dictionary
def dict_depth(my_dict):
    if isinstance(my_dict, dict):
          
        return 1 + (max(map(dict_depth, my_dict.values()))
                                    if my_dict else 0)
          
    return 0
  
# Driver code 
my_dict = {1:'a', 2: {3: {4: {}}}}
print(dict_depth(my_dict))
输出:
4


方法 3:迭代解决方案

在这种方法中,我们将嵌套键及其初始深度保存在一个变量中,比如p_dict 。现在,为p_dict启动一个循环,并在深入挖掘嵌套字典的同时不断弹出值。

# Python3 Program to find depth of a dictionary
def dict_depth(myDict):
  
    Ddepth = 1
    obj = [(k, Ddepth + 1) for k in myDict.values()
                          if isinstance(k, dict)]
    max_depth = 0
      
    while(obj):
        n, Ddepth = obj.pop()
        max_depth = max(max_depth, Ddepth)
          
        obj = obj + [(k, Ddepth + 1) for k in n.values()
                                 if isinstance(k, dict)]
          
    return max_depth
      
# Driver code 
myDict = {1:'a', 2: {3: {4:{}}}}
print(dict_depth(myDict))
输出:
4