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))
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))
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))
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_dict
y 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))
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