在字典中嵌套的列表中添加值



我想将股票价格添加到字典中,并在末尾附加最近的值。它应该一直运行到取消为止。那么一个while True循环可能合适吗?此外,我希望单上的价格以最近的价格为准。我使用yfinance作为股票价格库。

我需要的是它将股票#1的价格附加到字典中的列表中。然后是#2,然后是#3。然后再次从#1开始,但将其附加到同一字典中。在我的方法中,它一遍又一遍地迭代stock#1。

结果应该像

{
"AAPL": [137.13, 137.45, 138.02],
"TESL": [696.69, 696.72, 670.1],
"MSFT": [252.99, 253.01, 254.01],
}

到目前为止,我尝试过但没有成功的是:

stocks = ['AAPL', 'TESL', 'MSFT']
dict_akt = {}
while True:
list_temp = []
for stock in stocks:
sto = yf.Ticker(stock)
cur_price = sto.info['currentPrice']
list_temp.append(cur_price)
dict_akt[stock] = list_temp

错误输出为:

{
"AAPL": [137.13, 696.69, 252.99],
"TSLA": [137.13, 696.69, 252.99],
"MSFT": [137.13, 696.69, 252.99],
}

你应该在dict_akt中创建列表并直接操作它们

stocks = ['AAPL', 'TESL', 'MSFT']
dict_akt = {}
# init lists
for stock in stocks:
dict_akt[stock] = []
while True:
for stock in stocks:
sto = yf.Ticker(stock)
cur_price = sto.info['currentPrice']
dict_akt[stock].append(cur_price)
#check size and pop first element if desired size exceeded
if len(dict_akt[stock]) > 3:
dict_akt[stock].pop(0)

为了看到任何结果,您需要以某种方式跳出循环,因此让我们假设您希望至少运行一段时间。

支撑金融的公共api是出了名的慢。

还请注意,info字典可能并不总是包含您可能期望的键,因此您应该检查。

这段代码"手动"管理列表(最近三个条目)的大小。您可以考虑使用deque,但这取决于您希望如何访问结果。

import time
import yfinance
import requests_cache
results = dict()
tickers = 'AAPL', 'TESL', 'MSFT', 'GOOG', 'ORCL'
duration = 60 # seconds
session = requests_cache.CachedSession('yfinance.cache')
session.headers['User-agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15'
start = time.perf_counter()
while time.perf_counter() - start < duration:
for ticker in tickers:
stock = yfinance.Ticker(ticker, session=session)
if (price := stock.info.get('currentPrice')):
results.setdefault(ticker, []).append(price)
if len(results[ticker]) > 3:
results[ticker].pop(0)
print(results)

输出:

{'AAPL': [137.13, 137.13, 137.13], 'MSFT': [252.99, 252.99, 252.99], 'GOOG': [2228.55, 2228.55, 2228.55], 'ORCL': [67.14, 67.14, 67.14]}

指出:

所有值都是相同的,因为这是在非交易日(星期六)运行的。currentPrice键在TESL中缺失。

Python 3.8+ required

你需要pip install requests_cache如果你还没有它。

使用缓存会话可以潜在地提高性能

相关内容

  • 没有找到相关文章

最新更新