在字典中查找最新日期值
Find latest date value in a dictionary
我有这段代码请求股票 MSFT (Microsoft) 的信息,请求正确,我得到了我需要的所有数据,但是我想得到最新的股票价格(在 python 它将它从最新到最旧进行排序,但是我不想将数据从顶部移开,因为某些语言不会为我进行排序)在下面给出的结果中,有多个日期,例如:
{u'2019-10-08':
现在我想在 json 数据中找到最新日期并打印出来。
我正在使用 Alpha 优势获取此数据,给定的数据没有任何问题。
import requests,json
func = 'function=TIME_SERIES_DAILY'
sym = 'symbol=MSFT'
inter = 'interval=10min'
apikey = 'apikey=**********'
url = 'https://www.alphavantage.co/query?'+func+'&'+sym+'&'+inter+'&'+apikey
resp = requests.get(url)
data = json.loads(resp.content)
d = data['Time Series (Daily)']
# print (d['2020-01-03']) #<- date
# print (max(d.values())) # does not give the expected data (i think because the date is in a string)
print (d)
缩短的结果:
{u'Meta Data': {u'1. Information': u'Daily Prices (open, high, low, close) and Volumes', u'4.
Output Size': u'Compact', u'5. Time Zone': u'US/Eastern', u'2. Symbol': u'MSFT', u'3. Last
Refreshed': u'2020-01-03'}, u'Time Series (Daily)': {u'2019-10-08': {u'5. volume': u'26783336',
u'4. close': u'135.6700', u'2. high': u'137.7600', u'1. open': u'137.0800', u'3. low': u'135.6200'}}
我浏览了很多答案,其中一些没有答案,或者很少有不同语言的答案,我花了一些时间试图找到解决这个问题的方法。
如果我理解正确,您可以使用 datetime.strptime()
执行以下操作。请注意,在您的情况下,正如@Iguananaut 指出的那样,日期格式是按字典顺序排列的,因此您可以只使用 maxdate = max(d)
.
from datetime import datetime
maxdate = max((x for x in d.keys()), key=lambda x: datetime.strptime(x, "%Y-%m-%d"))
print(maxdate)
print(d[maxdate])
这给了我输出:
2020-01-03
{'1. open': '158.3200',
'2. high': '159.9450',
'3. low': '158.0600',
'4. close': '158.6200',
'5. volume': '21121681'}
我有这段代码请求股票 MSFT (Microsoft) 的信息,请求正确,我得到了我需要的所有数据,但是我想得到最新的股票价格(在 python 它将它从最新到最旧进行排序,但是我不想将数据从顶部移开,因为某些语言不会为我进行排序)在下面给出的结果中,有多个日期,例如:
{u'2019-10-08':
现在我想在 json 数据中找到最新日期并打印出来。
我正在使用 Alpha 优势获取此数据,给定的数据没有任何问题。
import requests,json
func = 'function=TIME_SERIES_DAILY'
sym = 'symbol=MSFT'
inter = 'interval=10min'
apikey = 'apikey=**********'
url = 'https://www.alphavantage.co/query?'+func+'&'+sym+'&'+inter+'&'+apikey
resp = requests.get(url)
data = json.loads(resp.content)
d = data['Time Series (Daily)']
# print (d['2020-01-03']) #<- date
# print (max(d.values())) # does not give the expected data (i think because the date is in a string)
print (d)
缩短的结果:
{u'Meta Data': {u'1. Information': u'Daily Prices (open, high, low, close) and Volumes', u'4.
Output Size': u'Compact', u'5. Time Zone': u'US/Eastern', u'2. Symbol': u'MSFT', u'3. Last
Refreshed': u'2020-01-03'}, u'Time Series (Daily)': {u'2019-10-08': {u'5. volume': u'26783336',
u'4. close': u'135.6700', u'2. high': u'137.7600', u'1. open': u'137.0800', u'3. low': u'135.6200'}}
我浏览了很多答案,其中一些没有答案,或者很少有不同语言的答案,我花了一些时间试图找到解决这个问题的方法。
如果我理解正确,您可以使用 datetime.strptime()
执行以下操作。请注意,在您的情况下,正如@Iguananaut 指出的那样,日期格式是按字典顺序排列的,因此您可以只使用 maxdate = max(d)
.
from datetime import datetime
maxdate = max((x for x in d.keys()), key=lambda x: datetime.strptime(x, "%Y-%m-%d"))
print(maxdate)
print(d[maxdate])
这给了我输出:
2020-01-03
{'1. open': '158.3200',
'2. high': '159.9450',
'3. low': '158.0600',
'4. close': '158.6200',
'5. volume': '21121681'}