Foros Python

Versión completa: KEYERROR EN GRAFOS
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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
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!
(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