Python: subconjunto de diccionarios anidados

Dado un diccionario anidado, pruebe si otro diccionario es un subconjunto.

Ejemplos:

Entrada : test_dict = {“gfg”: 12, ‘best’: {1: 3, 4: 3, ‘geeks’: {8: 7}}}, sub_dict = {8: 7} 
Salida : Verdadero 
Explicación : Obligatorio Anidado diccionario presente en Diccionario.
 

Entrada : test_dict = {“gfg”: 12, ‘best’: {1: 3, 4: 3, ‘geeks’: {8: 7}}}, sub_dict = {9: 7} 
Salida : falso 
Explicación : diccionario anidado no presente en Diccionario. 

Método: Usar all() + any() + isinstance() + recursividad

En esto, verificamos el subconjunto en cada anidamiento usando la función, y verificamos todas las claves que coinciden usando all(), any() se usa para que la utilidad pruebe cualquier posible subconjunto anidado que coincida con el subconjunto probado en el diccionario de prueba. Cada anidamiento se prueba usando recursividad.

Python3

# Python3 code to demonstrate working of
# Nested Dictionary Subset Python
# Using all() + any() + isinstance() + recursion
  
  
def check_eq(mast_dict, subdict):
    if not isinstance(mast_dict, (dict, list)):
        return mast_dict == subdict
    if isinstance(mast_dict, list):
  
        # check for nesting dictionaries in list
        return all(check_eq(x, y) for x, y in zip(mast_dict, subdict))
  
    # check for all keys
    return all(mast_dict.get(idx) == subdict[idx] or check_eq(mast_dict.get(idx), subdict[idx]) for idx in subdict)
  
  
def is_subset(mast_dict, subdict):
    if isinstance(mast_dict, list):
  
        # any matching dictionary in list
        return any(is_subset(idx, subdict) for idx in mast_dict)
  
    # any matching nested dictionary
    return check_eq(mast_dict, subdict) or (isinstance(mast_dict, dict) and any(is_subset(y, subdict) for y in mast_dict.values()))
  
  
# initializing dictionary
test_dict = {"gfg": 12, 'best': {1: 3, 4: 3, 'geeks': {8: 7}}, 'cs': 7}
  
# printing original dictionary
print("The original dictionary is : " + str(test_dict))
  
# initializing subset dict
sub_dict = {8: 7}
  
# calling func
res = is_subset(test_dict, sub_dict)
  
# printing result
print("Is dictionary subset : " + str(res))

Producción:

El diccionario original es: {‘gfg’: 12, ‘best’: {1: 3, 4: 3, ‘geeks’: {8: 7}}, ‘cs’: 7}
¿Es el subconjunto del diccionario: verdadero?

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 *