gpt4 book ai didi

python - python 中的智能类型转换

转载 作者:行者123 更新时间:2023-11-30 22:57:47 25 4
gpt4 key购买 nike

我正在进行 api 调用并收到 json 格式的响应,如下所示

result = {'foo': '123.456', 'bar': '23', 'donald': 'trump', 'time': '2016-04-07T05:31:49.532124Z'}

尽管结果是字典或列表,但内容始终是字符串。我想将这些值转换为适当的类型。 (即 '123.456' 为 float ,'23' 为 int,'time' 为日期时间。)

我的代码可以工作,但似乎应该有一种更简单/更有效的方法来做到这一点。有没有?

这是我的版本

from dateutil.parser import parse

def is_float(x):
try:
float(x)
return True
except ValueError:
return False

def is_int(x):
try:
a = float(x)
b = int(a)
except ValueError:
return False
else:
return a == b

def is_datetime(x):
try:
parse(x)
return True
except ValueError:
return False

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)
elif is_int(x):
return int(x)
elif is_float(x):
return float(x)
elif is_datetime(x):
return parse(x)
else:
return x

编辑:如果可能的话,我想避免使用 try except。我想将其实现到异步扭曲程序中,并且我认为 try 和 except block 因此它只是使程序同步。我是扭曲的新手,所以我不确定这是否属实。

<小时/>

根据 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

最佳答案

什么是合适的类型?我要求强调的是,有时对于人类来说,也不清楚类型是什么:您确定 "42" 始终是 int 还是有时必须将其视为字符串?

无论如何,正如您所做的那样,您可以使用在您的上下文中有意义的规则来构建解决方案。

就您而言,您可以使用简单的循环来简化代码

from dateutil.parser import parse

tests = [int, float, parse]

def smartcast(value):
for test in tests:
try:
return test(value)
except ValueError:
continue
# No match
return value

关于python - python 中的智能类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36467619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com