2012-06-05 14 views
6

Tengo un problema que realmente me vuelve loco. Normalmente haciendo int(20.0) resultaría en 20. Hasta aquí todo bien. Pero:flotador de python en la conversión int

levels = [int(gex_dict[i]) for i in sorted(gex_dict.keys())] 

while gex_dict[i] devuelve un flotador, p. 20.0, se traduce en:

"invalid literal for int() with base 10: '20.0'" 

estoy a un paso de masticando el último trozo de mi teclado.

+1

Se puede publicar el tipo de contenido que tiene en 'gex_dict'. Creo que tienes cuerdas que parecen flotadores en lugar de flotadores. – jamylak

+0

Hola, Jamylak, sí, tienes razón, esas eran cuerdas en lugar de flotadores, ¡gracias! – langohrschnauze

Respuesta

14

'20.0' es una cadena, no float; usted puede decir por las comillas simples en el mensaje de error. Usted puede obtener una int fuera de él por primera analizarlo con float, a continuación, truncando con int:

>>> int(float('20.0')) 
20 

(Aunque tal vez te desea almacenar los flotadores en lugar de cadenas en su diccionario, ya que eso es lo que parece estar esperando.)

+1

+1 por sugerir solucionar el problema en el origen. – Junuxx

+0

¡¡Muchísimas gracias a los dos !!! (¡¡¡eso fue rápido !!!) – langohrschnauze

2

Parece que el valor es una cadena, no un flotador. Por lo que necesita int(float(gex_dict[i]))

1

El problema es que usted tiene una cadena y no un flotador, ver esto como comparación:

>>> int(20.0) 
20 
>>> int('20.0') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: '20.0' 

Puede solucionar este problema convirtiendo en primer lugar a flotar y luego a int:

>>> int(float('20.0')) 
20 

por lo que sería en su caso:

levels = [int(float(gex_dict[i])) for i in sorted(gex_dict.keys())] 
2

se l Ooks como el problema es que gex_dict[i] realmente devuelve una representación de cadena de un flotador '20.0'. Aunque int() tiene la capacidad de convertir de un flotante a un int, y una representación de cadena de un entero a un int. No tiene la capacidad de transmitir desde una representación de cadena de un flotante a un int.

La documentación para int se puede encontrar aquí: http://docs.python.org/library/functions.html#int