Python – Diccionario de Nodes hoja y no hoja

A veces, mientras trabajamos con Python, podemos tener un problema en el que necesitamos trabajar con datos de gráficos representados en forma de diccionario. En esto, es posible que debamos verificar todos los Nodes de hoja y no principales. Este tipo de problema tiene aplicaciones directas en algoritmos de Machine Learning. Analicemos una forma en que se puede realizar esta tarea.
 

Entrada : test_dict = {‘Gfg’: {‘is’: 2, ‘best’: 1}} 
Salida : {‘leaf’: 2, ‘non-leaf’: 1}
Entrada : test_dict = {‘Gfg’: { ‘mejor’: 2}} 
Salida : {‘no hoja’: 1, ‘hoja’: 1} 
 

Método: Usando recursión + isinstance() + loop 
La combinación de las funcionalidades anteriores se puede usar para resolver este problema. En esto, recurrimos al anidamiento interno usando recursividad y verificamos hojas o no hojas por tipos de valor usando isinstance().
 

Python3

# Python3 code to demonstrate working of
# Leaf and Non-Leaf Nodes Dictionary
# Using recursion + isinstance() + loop
 
def hlpr_fnc(dict1, res = {'non-leaf':0, 'leaf':0}):
     
    #res['non-leaf'] += 1  
    nodes = dict1.keys()
    for node in nodes:
      subnode = dict1[node]
      if isinstance(subnode, dict):
        res['non-leaf'] += 1
        hlpr_fnc(subnode, res)
      else:
        res['leaf'] += 1 
    return res
 
# initializing dictionary
test_dict = {'a': {'b': 1, 'c': {'d': {'e': 2, 'f': 1}}, 'g': {'h': {'i': 2, 'j': 1}}}}
 
# printing original dictionary
print("The original dictionary : " + str(test_dict))
 
# Leaf and Non-Leaf Nodes Dictionary
# Using recursion + isinstance() + loop
res = hlpr_fnc(test_dict)
     
# printing result
print("The leaf and Non-Leaf nodes : " + str(res))

Producción:

The original dictionary : {'a': {'b': 1, 'c': {'d': {'e': 2, 'f': 1}}, 'g': {'h': {'i': 2, 'j': 1}}}}
The leaf and Non-Leaf nodes : {'non-leaf': 5, 'leaf': 5}

Publicación traducida automáticamente

Artículo escrito por manjeet_04 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 *