我正在进行api调用并接收json格式的响应,如下所示
result = {'foo': '123.456', 'bar': '23', 'donald': 'trump', 'time': '2016-04-07T05:31:49.532124Z'}
尽管结果是字典或列表,但内容始终是字符串。我想将这些值转换为适当的类型。(即'123.456'
为浮点,'23'
为int,'time'
为datetime。)
我的代码可以工作,但似乎应该有一种更简单/更有效的方法来实现这一点。有?在
这是我的版本
^{pr2}$编辑:如果可能的话,我想避免使用try
和{try
和{
根据Francesco的解决方案,下面是更新后的代码。在
from dateutil.parser import parse
def smartcast(x):
if isinstance(x, dict):
return { k:smartcast(v) for k, v in x.items() }
elif isinstance(x, list):
return map(smartcast, x)
else:
for t in [int, float, parse]:
try:
return t(x)
except ValueError:
continue
return x
使用呢ast.literal_评估()? 在
https://docs.python.org/2/library/ast.html#ast.literal_eval
投票赞成弗朗西斯科的回答。你需要一个异常。在
什么是合适的类型?我要求这样做是为了强调,有时人类也不清楚它的类型是什么:你确定“42”总是一个int,还是有时候它必须被看作是一个字符串?在
总之,正如您所做的那样,您可以使用在您的上下文中有意义的规则来构建解决方案。在
在你的例子中,你可以用一个简单的循环来简化你的代码
相关问题 更多 >
编程相关推荐