python - vacia - variable flotante definicion
¿Cómo convertir valores de cadena de un diccionario, en tipos de datos int/float? (6)
Para manejar la posibilidad de los 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:
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 forma, esto crea un nuevo diccionario de listas, en lugar de modificar el original en el lugar (lo que tendría que hacerse de manera diferente).
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.
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.
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 pitón, ya que normalmente requiere llamar a la instancia).
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" )
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.
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