0

此词典列表定期更改。

search_option = [{'strike_price': '1', 'bid_price': '0.25', 'implied_volatility': '0.94' }, 
{'strike_price': '3.5', 'bid_price': '0.20', 'implied_volatility': '0.88'},
{'strike_price': '2', 'bid_price': '0.05', 'implied_volatility': None}, 
{'strike_price': '3.5', 'bid_price': '0.31', 'implied_volatility': '0.25'}]

此处代码搜索隐含波动率低于 0.9 的期权。

for option_list in search_option:
    if option_list is not None:
        option_list = ([i for i in search_option if float(i["implied_volatility"]) < 0.90])
    print(option_list)

我偶尔会收到此错误:

float() 参数必须是字符串或数字,而不是 'NoneType'

我的问题是,我怎样才能让搜索保持不变(implied_volatility < 0.9),同时忽略 None 值? 换句话说,如果它是“无”,则跳到下一个可用选项。

4

4 回答 4

1

试试这个:

option_list = ([i for i in search_option if i["implied_volatility"] and float(i["implied_volatility"]) < 0.90])

您也不必遍历search_optionfor 循环,只需使用上面的代码替换它即可。

于 2020-06-22T15:07:36.123 回答
1
for i in search_option:
if i['implied_volatility'] is not None and float(i['implied_volatility']) < 0.9 :
     print(i)

这是你想要的吗?

于 2020-06-22T15:12:58.383 回答
1

在条件之前添加if i["implied_volatility"] is not None。你的整个列表理解因此变成:

[i for i in search_option if i["implied_volatility"] is not None if float(i["implied_volatility"]) < 0.90]

这是等效于嵌套条件的列表推导。

于 2020-06-22T15:13:16.890 回答
1

干得好:

option_list = [so for so in search_option if float(so['implied_volatility'] or '0.95') < 0.90]
print(option_list)

输出

[{'strike_price': '3.5', 'bid_price': '0.20', 'implied_volatility': '0.88'}, {'strike_price': '3.5', 'bid_price': '0.31', 'implied_volatility': '0.25'}]
于 2020-06-22T15:14:24.860 回答