Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
KEYERROR EN GRAFOS
#1
Buenos días, tengo un problema de key error al realizar una Busqueda en anchura en grafos, pues me da un keyerror, os agradecería si me piudierais ayudar, gracias.

Código:
import os

grafo = {'2': [(1, 10), (3, 7)],
            '1': [(2, 10), (3, 15), (6, 5)],
            '3': [(1, 15), (2, 7), (4, 7), (6, 10)],
            '6': [(1, 5), (3, 10), (4, 5), (5, 13)],
            '4': [(3, 7), (5, 7), (6, 5)],
            '5': [(4, 7), (6, 13)]
        }

#MUESTRA EL GRAFO ANTES DEL RECORRIDO
print("Muestra el grafo antes del recorrido: 
")
for key, lista in grafo.items():
    print(key)
    print(lista)

print()
os.system("pause")
        
visitados = []
cola = []

origen = input("Ingresa el nodo origen: ")
print("
Lista de recorrido en anchura
")
#Paso 1: SE COLOCA EL VÉRTICE ORIGEN EN UNA COLA
cola.append(origen)
#Paso 2: MIENTRAS LA COLA NO ESTE VACÍA
while cola:
    #paso 3: DESENCOLAR UN VÉRTICE, ESTE SERÁ AHORA EL VÉRTICE ACTUAL
    actual = cola.pop(0)

    #paso 4: SI EL VÉRTICE ACTUAL NO HA SIDO VISITADO
    if actual not in visitados:
        #paso 5: PROCESAR (IMPRIMIR) EL VÉRTICE ACTUAL
        print("Vertice actual -> ", actual)
        #paso 6: COLOCAR VÉRTICE ACTUAL EN LA LISTA DE VISITADOS
        visitados.append(actual)
    #paso 7: PARA CADA VÉRTICE QUE EL VÉRTICE ACTUAL TIENE COMO DESTINO,
    #        Y QUE NO HA SIDO VISITADO:
    #        ENCOLAR EL VERTICE
    for key, lista in grafo[actual]:
        if key not in visitados:
            cola.append(key)

print()
os.system("pause")

Error: 

Lista de recorrido en anchura

Vertice actual ->  2

Vertice actual ->  1

Traceback (most recent call last):

  File "c:/Users/K/OneDrive/Escritorio/Ejercicios/Banchura.py", line 50, in <module>

    for key, lista in grafo[actual]:
Keyerror: 1
Responder
#2
Hola, bienvenido.

El problema es que tu variable actual es un entero, pero las claves del diccionario grafo son cadenas. Podrías solucionarlo haciendo una pequeña conversión:

Código:
for key, lista in grafo[str(actual)]:

O capaz ni siquiera haya necesidad de que definas las claves como cadenas.

Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
(22-05-2020, 08:38 PM)Francisco escribió: Hola, bienvenido.

El problema es que tu variable actual es un entero, pero las claves del diccionario grafo son cadenas. Podrías solucionarlo haciendo una pequeña conversión:

Código:
for key, lista in grafo[str(actual)]:

O capaz ni siquiera haya necesidad de que definas las claves como cadenas.

Saludos!

Muchisimas gracias ya conseguí que funcione  Rolleyes
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)