2016-08-30 31 views
1

我试图从返回JSON对象的API提取财务数据。 API没有明确说明返回的字典是OrderedDicts,但是输出总是被排序的,因此我会做出这样的假设。检索字典中最后一个键的值

我需要检索字典中最后一个键的值,因为我需要最新的财务数据。但是,我不能明确地使用密钥的名称来提取它,因为它是以日期格式显示的,并且可能会因使用查询的公司而有所不同。

我试图将字典对象转换成列表,并使用索引-1选择最后一个键,但转换过程似乎随机化字典的顺序不再检索最后一个日期。

那么我该如何去检索字典中最后一个键的值?

这里是什么样的JSON对象看起来像一个例子:

{'2007-06-01T00:00:00': 21.19, 
'2008-06-01T00:00:00': 26.01, 
    '2009-06-01T00:00:00': 19.34, 
    '2010-06-01T00:00:00': 22.88, 
    '2011-06-01T00:00:00': 23.77, 
    '2012-06-01T00:00:00': 14.77, 
    '2013-06-01T00:00:00': 16.58, 
    '2014-06-01T00:00:00': 14.02, 
    '2015-06-01T00:00:00': 7.0, 
    '2016-06-01T00:00:00': 9.08} 
+4

通常,如果API没有指定它实际上做了什么,则不应该依赖它继续这样做。 –

+2

如果密钥全部可比,那么最高会是最近的,所以你可以用'max(data.keys())'来获得最近的密钥,这取决于你需要指定一个key =的格式。将日期转换为可以正确比较的格式。 –

+0

您可以将日期字符串转换为实际的日期时间对象,对它们进行排序并获得最大的日期时间对象。 –

回答

4

重新考虑我意识到,因为日期的格式,它们是作为字符串正确可比性问题后,你可以做k,v = max(data.items())但是,如果您(或其他人在查看此主题)使用的日期格式不起作用,那么我的原始答案如下。


,你可以简单地使用max内置比较字典的键,以确保它们都比较,日期和时间,你可以使用key参数比较它们作为datetime对象:

import datetime 

data = {'2007-06-01T00:00:00': 21.19, 
'2008-06-01T00:00:00': 26.01, 
    '2009-06-01T00:00:00': 19.34, 
    '2010-06-01T00:00:00': 22.88, 
    '2011-06-01T00:00:00': 23.77, 
    '2012-06-01T00:00:00': 14.77, 
    '2013-06-01T00:00:00': 16.58, 
    '2014-06-01T00:00:00': 14.02, 
    '2015-06-01T00:00:00': 7.0, 
    '2016-06-01T00:00:00': 9.08} 

def converter(timestamp): 
    return datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S") 

highest = max(data.keys(),key=converter) 

print(highest) #2016-06-01T00:00:00 
+0

实际上'max(data.items(),key = ...)'更像它,因为OP想要检索与密钥相关的值。确保'converter'需要一个元组而不是时间戳。 – ozgur

+0

编写转换器函数似乎比较简单,只处理关键字,然后获得'value = data [highest]',但绝对可以让它处理它。 –

+0

有道理。顺便说一句,你不需要'.keys()'。 – ozgur