Python: obtenga elementos de nivel anidado particulares del diccionario

Dado un diccionario, extraiga elementos de un nivel particular.

Ejemplos:

Entrada : {“Gfg” : { “n1”: 3, “nd2”: { “n2” : 6 }}, “is” : { “ne1”: 5, “ndi2”: { “ne2” : 8, “ ne22”: 10 } }}, K = 2 
Salida : {‘n2’: 6, ‘ne2’: 8, ‘ne22’: 10} 
Explicación : se extraen los elementos del segundo anidamiento.

Entrada : {“Gfg” : { “n1”: 3, “nd2”: { “n2” : 6 }}, “is” : { “ne1”: 5, “ndi2”: { “ne2” : 8, “ ne22” : 10 } }}, K = 1 
Salida : {“n1”: 3, “ne1”: 5} 
Explicación : Elementos del 1er anidamiento extraídos. 

Método: Usando isinstance() + recursividad

Esta es una de las formas en que se puede realizar esta tarea. En esto, realizamos la recursividad requerida para los anidamientos internos, y se usa isinstance para diferenciar entre la instancia de dict y otros tipos de datos para probar el anidamiento.

Python3

# Python3 code to demonstrate working of
# Get particular Nested level Items from Dictionary
# Using isinstance() + recursion
  
# helper function
  
  
def get_items(test_dict, lvl):
  
    # querying for lowest level
    if lvl == 0:
        yield from ((key, val) for key, val in test_dict.items()
                    if not isinstance(val, dict))
    else:
  
        # recur for inner dictionaries
        yield from ((key1, val1) for val in test_dict.values()
                    if isinstance(val, dict) for key1, val1 in get_items(val, lvl - 1))
  
  
# initializing dictionary
test_dict = {"Gfg": { "n1": 3, "nd2": { "n2": 6 }}, 
             "is": { "ne1": 5, "ndi2": { "ne2": 8, "ne22": 10 } }}
  
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
  
# initializing K
K = 2
  
# calling function
res = get_items(test_dict, K)
  
# printing result
print("Required items : " + str(dict(res)))
Producción

El diccionario original es: {‘Gfg’: {‘n1’: 3, ‘nd2’: {‘n2’: 6}}, ‘is’: {‘ne1’: 5, ‘ndi2’: {‘ne2’: 8, ‘ne22’: 10}}}
Elementos necesarios: {‘n2’: 6, ‘ne2’: 8, ‘ne22’: 10}

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 *