Python flotar en la conversión int

Tengo un problema que realmente me vuelve loco. Normalmente haciendo int(20.0) resultaría en 20 . Hasta ahora tan bueno. Pero:

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

mientras que gex_dict[i] devuelve un flotante, por ejemplo, 20.0 , da como resultado:

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

Estoy a un paso de masticar la última pieza de mi teclado.

'20.0' es una cadena, no un float ; Se puede decir por las comillas simples en el mensaje de error. Puede obtener un int fuera de él si primero lo analiza con float y luego lo trunca con int :

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

(Aunque quizás quieras almacenar flotadores en lugar de cadenas en tu diccionario, ya que eso es lo que parece que estás esperando).

Parece que el valor es una cadena, no una flotación. Así que necesitas int(float(gex_dict[i]))

Parece que el problema es que gex_dict[i] realidad devuelve una representación de cadena de un flotador '20.0' . Aunque int () tiene la capacidad de convertir desde un flotante a un int, y una representación de cadena de un entero a un int. No tiene la capacidad de convertir 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

El problema es que tiene una cadena y no una flotación, vea esto como una comparación:

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

Puede solucionar este problema convirtiendo primero a float y luego a int:

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

Así sería en tu caso:

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