【问题标题】:Ignore None values and skip to next value?忽略无值并跳到下一个值?
【发布时间】:2020-06-22 15:05:23
【问题描述】:

此词典列表定期更改。

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 换句话说,如果它是“无”,则跳到下一个可用选项。

【问题讨论】:

  • 该错误消息是否以“ValueError:”开头?
  • 好吧,我必须自己做实验。错误是TypeError: float() argument must be a string or a number, not 'NoneType'。不要修剪错误消息,它们包含有价值的信息。
  • 注意到了,谢谢!

标签: python list dictionary finance computational-finance


【解决方案1】:

试试这个:

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

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

【讨论】:

  • 由于 None 被认为是虚假的,因此只需测试 if i["implied_volatility"] and float(i["implied_volatility"]) &lt; 0.90 就足够了
【解决方案2】:
for i in search_option:
if i['implied_volatility'] is not None and float(i['implied_volatility']) < 0.9 :
     print(i)

这是你想要的吗?

【讨论】:

    【解决方案3】:

    在条件之前添加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]
    

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

    【讨论】:

      【解决方案4】:

      给你:

      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'}]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-15
        • 1970-01-01
        • 2013-10-16
        • 2018-09-03
        相关资源
        最近更新 更多