Python | Encuentra la profundidad de un diccionario

Requisito previo: Diccionario anidado

La tarea es encontrar la profundidad del diccionario dado en Python. Analicemos todos los diferentes métodos para realizar esta tarea.

Ejemplos:

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

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

Enfoque n.º 1: enfoque ingenuo

Un enfoque ingenuo para encontrar la profundidad de un diccionario es contar el número de llaves de apertura. Pero, un inconveniente de este enfoque es que solo funcionaría si la entrada es correcta.

# 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))
Producción:

4

 
Enfoque #2: Usar recursividad

En este método, utilizamos la recursividad con la función max() que selecciona la mayor profundidad para el diccionario actual bajo escrutinio en cada nivel.

# 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))
Producción:

4

Otra versión de la solución recursiva es usar la función map() mediante la cual los valores del diccionario interno se asignan a la función llamada.

# 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))
Producción:

4

 
Enfoque #3: Solución iterativa

En este enfoque, guardamos la clave anidada y su profundidad inicial en una variable, digamos p_dict. Ahora, inicie un ciclo para p_dicty siga sacando valores mientras profundiza en los diccionarios anidados.

# 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))
Producción:

4

Publicación traducida automáticamente

Artículo escrito por Smitha Dinesh Semwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *