2 回答

TA貢獻1872條經驗 獲得超4個贊
假設您需要的信息是從 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]
添加回答
舉報