2 回答
TA贡献1872条经验 获得超3个赞
假设您需要的信息是从 API 调用返回的 - 下面的代码可能适合您。
import yfinance as yf
from collections import defaultdict
tickers = ['AAPL','ADBE']
sector_dict = defaultdict(list)
for ticker in tickers:
try:
sector_dict[yf.Ticker(ticker).info['sector']].append(ticker)
except Exception as e:
print(f'Failed to get ticker info for {ticker}')
print(sector_dict)
输出
defaultdict(<class 'list'>, {'Technology': ['AAPL', 'ADBE']})
TA贡献1868条经验 获得超4个赞
您应该始终避免包罗万象的异常。
update您最初的示例掩盖了不是列表方法的事实。当您为像这样的Python字典添加下标时sector_dict[ticker],我们现在讨论的是与键关联的值ticker。在本例中是一个列表。
另外更新也不是这样使用的,所以我认为它掩盖了第二个错误。它的用法是用另一个字典或可迭代对象更新一个字典。不更新现有条目。
最后,该try子句应尽可能小,以便确定错误来自何处,或者至少可以保证不会出现像本例这样的冲突异常。
我认为这就是为什么您的列表在我之前的解决方案中仅返回最后一个股票代码,因为yf.Ticker导致 aKeyError并KeyError调用异常而不是最后一个。
我是这样做的:
sector_dict = {'no sector':[]}
for ticker in tickers:
try:
sector = yf.Ticker(ticker).info['sector']
except KeyError:
sector_dict['no sector'].append(ticker)
try:
sector_dict[sector].append(ticker)
except KeyError:
sector_dict[sector] = [ticker]
添加回答
举报