2 回答

TA貢獻(xiàn)1872條經(jīng)驗 獲得超4個贊
假設(shè)您需要的信息是從 API 調(diào)用返回的 - 下面的代碼可能適合您。
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貢獻(xiàn)1868條經(jīng)驗 獲得超4個贊
您應(yīng)該始終避免包羅萬象的異常。
update您最初的示例掩蓋了不是列表方法的事實。當(dāng)您為像這樣的Python字典添加下標(biāo)時sector_dict[ticker],我們現(xiàn)在討論的是與鍵關(guān)聯(lián)的值ticker。在本例中是一個列表。
另外更新也不是這樣使用的,所以我認(rèn)為它掩蓋了第二個錯誤。它的用法是用另一個字典或可迭代對象更新一個字典。不更新現(xiàn)有條目。
最后,該try子句應(yīng)盡可能小,以便確定錯誤來自何處,或者至少可以保證不會出現(xiàn)像本例這樣的沖突異常。
我認(rèn)為這就是為什么您的列表在我之前的解決方案中僅返回最后一個股票代碼,因為yf.Ticker導(dǎo)致 aKeyError并KeyError調(diào)用異常而不是最后一個。
我是這樣做的:
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]
添加回答
舉報