¿Cómo convertir valores de cadena de un diccionario, en tipos de datos int / float?

Tengo una lista de diccionarios de la siguiente manera:

list = [ { 'a':'1' , 'b':'2' , 'c':'3' }, { 'd':'4' , 'e':'5' , 'f':'6' } ] 

¿Cómo convierto los valores de cada diccionario dentro de la lista a int / float?

Así se convierte en:

 list = [ { 'a':1 , 'b':2 , 'c':3 }, { 'd':4 , 'e':5 , 'f':6 } ] 

Gracias.

 for sub in the_list: for key in sub: sub[key] = int(sub[key]) 

Le da un casting como un int en lugar de como una cadena.

Tengo que amar las comprensiones de la lista.

 [dict([a, int(x)] for a, x in b.items()) for b in list] 

( observación: para el código único de Python 2 puede usar “iteritems” en lugar de “elementos” )

Si ese es su formato exacto, puede revisar la lista y modificar los diccionarios.

 for item in list_of_dicts: for key, value in item.iteritems(): try: item[key] = int(value) except ValueError: item[key] = float(value) 

Si tienes algo más general, entonces tendrás que hacer algún tipo de actualización recursiva en el diccionario. Verifique si el elemento es un diccionario, si lo es, use la actualización recursiva. Si se puede convertir en un flotante o int, conviértalo y modifique el valor en el diccionario. No hay una función incorporada para esto y puede ser bastante desagradable (y no es python, ya que generalmente requiere llamar a la instancia).

Para manejar la posibilidad de valores de cadena int , float y vacía, usaría una combinación de comprensión de lista, comprensión de diccionario, junto con expresiones condicionales, como se muestra a continuación:

 dicts = [{'a': '1' , 'b': '' , 'c': '3.14159'}, {'d': '4' , 'e': '5' , 'f': '6'}] print [{k: int(v) if v and '.' not in v else float(v) if v else None for k, v in d.iteritems()} for d in dicts] # [{'a': 1, 'c': 3.14159, 'b': None}, {'e': 5, 'd': 4, 'f': 6}] 

Sin embargo, las versiones del diccionario no se agregaron a Python 2 hasta la versión 2.7. Todavía se puede hacer en versiones anteriores como una sola expresión, pero se debe escribir usando el constructor dict como lo siguiente:

 # for pre-Python 2.7 print [dict([k, int(v) if v and '.' not in v else float(v) if v else None] for k, v in d.iteritems()) for d in dicts] # [{'a': 1, 'c': 3.14159, 'b': None}, {'e': 5, 'd': 4, 'f': 6}] 

Tenga en cuenta que, de cualquier manera, esto crea un nuevo diccionario de listas, en lugar de modificar el original en el lugar (lo que debería hacerse de manera diferente).

Si decide una solución actuando “en su lugar”, puede echar un vistazo a esta:

 >>> d = [ { 'a':'1' , 'b':'2' , 'c':'3' }, { 'd':'4' , 'e':'5' , 'f':'6' } ] >>> [dt.update({k: int(v)}) for dt in d for k, v in dt.iteritems()] [None, None, None, None, None, None] >>> d [{'a': 1, 'c': 3, 'b': 2}, {'e': 5, 'd': 4, 'f': 6}] 

Por cierto, el orden de las claves no se conserva porque así es como funcionan los diccionarios estándar, es decir, sin el concepto de orden.

  newlist=[] #make an empty list for i in list: # loop to hv a dict in list s={} # make an empty dict to store new dict data for k in i.keys(): # to get keys in the dict of the list s[k]=int(i[k]) # change the values from string to int by int func newlist.append(s) # to add the new dict with integer to the list