2010-04-29 15 views
8

Obtengo un KeyError para una clave fuera del diccionario, aunque sé que la clave ES, de hecho, en el diccionario. ¿Alguna idea sobre qué podría estar causando esto?Python plantea un KeyError (para una clave fuera del diccionario) aunque la clave ESTÁ en el diccionario

print G.keys() 

devuelve lo siguiente:

['24', '25', '20', '21', '22', '23', '1', '3', '2', '5', '4', '7', '6', '9', '8', '11', '10', '13', '12', '15', '14', '17', '16', '19', '18'] 

pero cuando intento acceder a un valor en el diccionario en la siguiente línea de código ...

for w in G[v]: #note that in this example, v = 17 

me sale el siguiente error mensaje:

KeyError: 17 

Cualquier ayuda, consejos o consejos son apreciados. Gracias.

+0

Una cosa más digna de mención, he intentado acceder a diferentes valores clave (1, 2, 3, etc.) y aún obtener los mismos resultados. – ignorantslut

+3

¿Está v ajustado a 17 o '17'? – Syntactic

Respuesta

26

que es simple, 17 != '17'

+0

wow Me siento como un idiota. Estoy leyendo estos valores de un archivo, por alguna razón esto no se me ocurrió, ¡gracias! – ignorantslut

+1

Huele como un defecto de diseño para mí. – tchrist

+0

@tchrist ausencia de moldes implícitos de entradas a cadenas como un defecto de diseño en el lenguaje? – wRAR

5

Las claves son cadenas, que está tratando de acceder a ellos como enteros.

+0

Entonces? Tonto que eso debería importar. Esto no es Java, ¿sabes? – tchrist

+2

@tchrist: Incorrecto. Python está fuertemente tipado ... como debería ser. Esto no es PHP, ¿sabes? (Yuck.) – FogleBird

3

prueba con v = '17'. Debe convertir su int en la cadena

Cuestiones relacionadas