我有一个配置文件,其中的项目可以是单个元素或列表。
pct_accepted=0.75
pct_rejected=0.35, 0.5
回读后,它们都将以字符串形式显示,
config['pct_accepted']='0.75'
config['pct_rejected']=['0.35', '0.5']
是否有一种干净的方法可以将它们转换为浮点型,而不必检查它们是标量还是列表 我现在的尝试是:
for k in ['pct_accepted','pct_rejected']:
if isinstance(config[k], list) :
config[k]=[float(item) for item in config[k]]
if isinstance(config[k], string) :
config[k]=float(config[k])
看起来不太整齐。
答案 0 :(得分:2)
由于您添加了numpy
标签:
In [161]: np.array('12.23',float).tolist()
Out[161]: 12.23
In [162]: np.array(['12.23','12.23'],float).tolist()
Out[162]: [12.23, 12.23]
简短,甜蜜和矫kill过正!
答案 1 :(得分:1)
没有干净的方法,仅仅是因为转换对列表无效:某物必须查看数据类型。您可以将其隐藏在函数中,但仍然存在。
您可以通过使用可用的广播例程来稍微缩短代码。诸如map(float, config[k])
之类的东西可能会让您觉得更好。
您还可以将类型存储在变量中,并对变量进行两次测试,而不是使用两次isinstance
调用。这样可以节省一些字符,并且缩放效果不佳,但对简单的应用程序效果很好。