Long list creating sorted() TypeError: 'NoneType' object is not subscriptable

Long list creating sorted() TypeError: 'NoneType' object is not subscriptable

option_list 是一个包含字符串的字典列表。

只要 option_list 列表不太大,此代码就可以工作。

option_list = sorted(option_list, key = lambda option: option['expiration_date'])
option_list = sorted(option_list, key = lambda option: option['strike_price'], reverse=True)

它按到期日和行使价对期权数据进行排序。

但是,当 option_list 列表达到任意长度时,它会抛出此错误:

---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-237-7fd70ddaa35a> in <module>()
      3 # option_list = sorted(option_list, key = lambda option: (option['expiration_date'], option['strike_price']))
      4 
----> 5 option_list = sorted(option_list, key = lambda option: option['expiration_date'])
      6 option_list = sorted(option_list, key = lambda option: option['strike_price'], reverse=True)
      7 

<ipython-input-237-7fd70ddaa35a> in <lambda>(i)
      3 # option_list = sorted(option_list, key = lambda option: (option['expiration_date'], option['strike_price']))
      4 
----> 5 option_list = sorted(option_list, key = lambda option: option['expiration_date'])
      6 option_list = sorted(option_list, key = lambda option: option['strike_price'], reverse=True)
      7 

TypeError: 'NoneType' object is not subscriptable

但是,将 option_list 列表截断为任意数字再次起作用:

option_list = sorted(option_list[:-5000], key = lambda option: option['expiration_date'])

我试过了-1000,但还不够低。

为什么会发生这种情况,我该如何解决它而不必切断数据?

您的问题似乎是缺少数据。由于错误是引用 NoneTypes。 先尝试过滤掉丢失的数据:

no_missing_options = [o for o in option_list if o]
option_list = sorted(no_missing_options , key=lambda x: x['expiration_date'])

我认为您需要更改变量名称。我相信它不应该与您正在排序的内容相匹配。我也认为 Mustafa Aydin 是正确的。但是,也许只需在变量的末尾添加一个 's' 使其成为 option_lists 就可以了。