Python – Detectar bucle en diccionarios

A veces, mientras trabajamos con diccionarios de Python, podemos tener problemas en los que necesitamos verificar si los valores de los diccionarios no forman un bucle cuando se asignan a través de la clave de otros diccionarios. Este tipo de problema puede tener aplicaciones en muchos dominios, incluida la programación competitiva y la fuerza bruta.

Entrada : test_dict1 = {9: [1, 5], 8: [1, 4], 10: [4, 2]}
test_dict2 = {2: [1, 8]}
Salida : Verdadero

Entrada : test_dict1 = {15: [1, 5]}
test_dict2 = {2: [1, 10]}
Salida : Falso

Método n.º 1: Uso del bucle
Esta es la forma bruta en la que se puede realizar esta tarea. En esto, iteramos para todos los valores de las claves de un diccionario en particular y mapeamos con valores de claves similares en las claves del diccionario.

# Python3 code to demonstrate working of 
# Detect loop in Dictionaries
# Using loop
  
# initializing dictionaries
test_dict1 = {7 : [1, 2], 8 : [1, 4], 9 : [4, 2]} 
test_dict2 = {2 : [1, 7], 10 : [1, 6], 11 : [24, 20]} 
  
# printing original dictionaries
print("The original dictionary 1 is : " + str(test_dict1))
print("The original dictionary 2 is : " + str(test_dict2))
  
# Detect loop in Dictionaries
# Using loop
res = False
for idx1 in test_dict1.values():
    temp1 = (idx for idx in idx1 if idx in test_dict2)
    for idx in temp1:
        for idx2 in test_dict2[idx]:
            if idx2 in test_dict1:
                res = True
  
# printing result 
print("Does dictionaries contain loop : " + str(res)) 
Producción :

The original dictionary 1 is : {8: [1, 4], 9: [4, 2], 7: [1, 2]}
The original dictionary 2 is : {2: [1, 7], 11: [24, 20], 10: [1, 6]}
Does dictionaries contain loop : True

Método n.º 2: usar el any()bucle +
Esta es una forma abreviada de resolver este problema. En esto, reducimos el bucle interno inculcando any() y devolvemos True si hay algún bucle presente.

# Python3 code to demonstrate working of 
# Detect loop in Dictionaries
# Using any() + loop
  
# initializing dictionaries
test_dict1 = {7 : [1, 2], 8 : [1, 4], 9 : [4, 2]} 
test_dict2 = {2 : [1, 7], 10 : [1, 6], 11 : [24, 20]} 
  
# printing original dictionaries
print("The original dictionary 1 is : " + str(test_dict1))
print("The original dictionary 2 is : " + str(test_dict2))
  
# Detect loop in Dictionaries
# Using any() + loop
res = False
for key, val in test_dict1.items():
    if any([vl in test_dict2 and key in test_dict2[vl] for vl in val]):
        res = True
  
# printing result 
print("Does dictionaries contain loop : " + str(res)) 
Producción :

The original dictionary 1 is : {8: [1, 4], 9: [4, 2], 7: [1, 2]}
The original dictionary 2 is : {2: [1, 7], 11: [24, 20], 10: [1, 6]}
Does dictionaries contain loop : True

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 *