Все значения являются конечно «реальных строк» (вы можете делать с ними все, что вы возможно, со строками!), но я думаю, что большинство респондентов знают, что вы имеете в виду, - вы хотите попробовать преобразовать каждое значение в несколько возможных типов поочередно («int» и «float» - это именно то, что вы называете, но не могли есть другие ...?) и вернуться и использовать первое преобразование, которое будет успешным.
Это, конечно, наилучшим образом инкапсулируется функцией, отличной от вашей прикладной логики. Если лучший матч для ваших нужд, это просто сделать преобразование и вернуть «лучший преобразованное значение» (и все они будут использоваться аналогично), то:
def best_convert(s, types=(int, float)):
for t in types:
try: return t(s)
except ValueError: continue
return s
, если вы хотите сделать что-то другое в каждом так, то:
def dispatch(s, defaultfun, typesandfuns):
for t, f in typesandfuns:
try:
v = t(s)
except ValueError:
continue
else:
return f(v)
return defaultfun(s)
называться, например, как
r = dispatch(s, asstring, ((int, asint), (float, asfloat)))
, если функции должны быть вызваны в «неконвертируемых струн», те, конвертируемые в целое, и те, конвертируемые плавать, но не ИНТ , а соответственно asstring
, asint
, asfloat
.
я не рекомендуем помещать «структурные» «пытаются преобразования в этих различных типов, в свою очередь, и действовать соответствующим образом» код в неразрывной смеси с «логикой приложения» - это прозрачный чехол аккуратно наслоения два аспекта, с хорошей структурой и разделением.
Я предполагаю, что это на самом деле важно для вас будь то ИНТ или плавать? В любом случае обе поддерживают одни и те же операции, хотя, конечно, с разной точностью. – extraneon
Почему они струны? Как они попали в словарь в первую очередь? Почему не были преобразованы в соответствующие объекты * до того, как они были помещены в словарь? –
Код, который дает мне dict, не в моей руке. В принципе, я не могу изменить dict. – laspal