Toutes les valeurs sont bien sûr « cordes réelles » (vous pouvez le faire avec eux, vous tous peut-être faire avec des chaînes!), mais je pense que la plupart des répondants savent ce que vous voulez dire - vous voulez essayer de convertir chaque valeur en plusieurs types possibles ('int' puis 'float' est spécifiquement ce que vous nommez, mais vous ne pouvez pas il y en a d'autres ...?) et retournez et utilisez la première conversion qui réussit.
Ceci est bien sûr le mieux encapsulé dans une fonction, loin de votre logique d'application. Si le meilleur match pour vos besoins est juste pour faire la conversion et le retour de la « meilleure valeur convertie » (et ils seront tous de la même occasion), puis:
def best_convert(s, types=(int, float)):
for t in types:
try: return t(s)
except ValueError: continue
return s
si vous voulez faire quelque chose de différent dans chaque cas,:
def dispatch(s, defaultfun, typesandfuns):
for t, f in typesandfuns:
try:
v = t(s)
except ValueError:
continue
else:
return f(v)
return defaultfun(s)
à appeler, par exemple, comme
r = dispatch(s, asstring, ((int, asint), (float, asfloat)))
si les fonctions à appeler sur les « chaînes inconvertibles », les convertibles en int, et les convertibles à flotter, mais pas int , une respectivement asstring
, asint
, asfloat
.
Je ne pas recommande de mettre la « structure » « essayez de le convertir à ces différents types, à son tour et agir en conséquence » code dans un mélange inextricable avec votre « logique de l'application » - c'est un cas clair pour la superposition d'une manière ordonnée la deux aspects, avec une bonne structure et une bonne séparation.
Je suppose qu'il importe réellement pour vous, que ce soit un int ou flotter? Les deux soutiennent les mêmes opérations de toute façon, bien qu'avec des précisions différentes bien sûr. – extraneon
Pourquoi sont-ils des ficelles? Comment sont-ils entrés dans le dictionnaire en premier lieu? Pourquoi n'ont-ils pas été convertis en objets appropriés avant d'être mis dans le dictionnaire? –
le code qui me donne le dict n'est pas dans ma main. Fondamentalement, je ne peux pas changer le dict. – laspal