为了账号安全,请及时绑定邮箱和手机立即绑定

如何将值添加到存储为字典值的列表中?

如何将值添加到存储为字典值的列表中?

qq_花开花谢_0 2023-10-31 10:57:07
我有一本空字典,需要根据股票代码提取行业信息。然后,我想将同一行业下的所有股票添加到以行业为键的列表中。例如,最终结果如下所示:{'technology': ['AAPL', 'ADBE'], 'Consumer Cyclical': ['TSLA', 'UA']}这是我一直在努力但没有成功的事情:import yfinance as yftickers = ['AAPL', 'ADBE', 'AMD', 'AMAT', 'AMZN', 'ANF',                    'APA', 'BA', 'BABA', 'BBY', 'BIDU', 'BMY', 'BRX', 'BZUN',                    'C', 'CAT', 'CLF', 'CMCSA', 'CMG', 'COST', 'CRM', 'CVX',                    'DE', 'EBAY', 'FB', 'FCX', 'FDX', 'FSLR',                     'GILD', 'GM', 'GME', 'GOOG','GPRO', 'GS',  'HAL', 'HD',                    'HIG', 'HON', 'IBM', 'JCPB', 'JD', 'JPM', 'LULU', 'LYG',                     'MA', 'MCD', 'MDT', 'MS', 'MSFT','MU', 'NEM', 'NFLX',                    'NKE','PBR', 'QCOM', 'SLB', 'SNAP', 'SPG', 'TSLA', 'TWTR',                    'TXN', 'UA', 'UAL', 'V', 'VZ' 'X', 'XLNX', 'ZM']sector_dict = dict()for ticker in tickers:    try:        sector = yf.Ticker(ticker).info['sector']        sector_dict[sector].update(ticker)    except:        sector_dict.update({'no sector':[ticker]})下面只给了我一本空字典。有人看出问题出在哪里吗?
查看完整描述

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


查看完整回答
反对 回复 2023-10-31
?
MYYA

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]


查看完整回答
反对 回复 2023-10-31
  • 2 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信