J'ai une liste de dictionnaires comme suit:
list = [ { 'a':'1' , 'b':'2' , 'c':'3' }, { 'd':'4' , 'e':'5' , 'f':'6' } ]
Comment convertir les valeurs de chaque dictionnaire de la liste en int/float?
Alors ça devient:
list = [ { 'a':1 , 'b':2 , 'c':3 }, { 'd':4 , 'e':5 , 'f':6 } ]
Merci.
for sub in the_list:
for key in sub:
sub[key] = int(sub[key])
Lui donne un casting comme un int au lieu d'une chaîne.
Je dois comprendre la liste d'amour.
[dict([a, int(x)] for a, x in b.items()) for b in list]
( remarque: pour le code uniquement Python 2, vous pouvez utiliser "iteritems" au lieu de "items" )
Si c'est votre format exact, vous pouvez parcourir la liste et modifier les dictionnaires.
for item in list_of_dicts:
for key, value in item.iteritems():
try:
item[key] = int(value)
except ValueError:
item[key] = float(value)
Si vous avez quelque chose de plus général, vous devrez faire une sorte de mise à jour récursive du dictionnaire. Vérifiez si l'élément est un dictionnaire, si c'est le cas, utilisez la mise à jour récursive. S'il peut être converti en float ou en int, convertissez-le et modifiez la valeur dans le dictionnaire. Il n'y a pas de fonction intégrée pour cela et cela peut être assez moche (et non-Pythonic car cela nécessite généralement d'appeler isinstance).
Pour gérer la possibilité de valeurs int
, float
et de chaînes vides, j'utilisais une combinaison de compréhension de liste, de compréhension du dictionnaire et d'expressions conditionnelles, comme indiqué:
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}]
Cependant, la compréhension du dictionnaire n'a pas été ajoutée à Python 2 jusqu'à la version 2.7. Cela peut toujours être fait dans les versions précédentes en tant qu'expression unique, mais doit être écrit en utilisant le constructeur dict
comme suit:
# 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}]
Notez que de toute façon, cela crée un nouveau dictionnaire de listes, au lieu de modifier le dictionnaire original sur place (ce qui devrait être fait différemment).
Si vous optez pour une solution agissant "sur place", vous pouvez consulter celle-ci:
>>> 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}]
Au fait, l'ordre des clés n'est pas préservé, car c'est ainsi que fonctionnent les dictionnaires standard, c'est-à-dire sans le concept d'ordre.
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