Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检索字典中最后一个键的值_Python_Sorting_Dictionary_Key_Key Value - Fatal编程技术网

Python 检索字典中最后一个键的值

Python 检索字典中最后一个键的值,python,sorting,dictionary,key,key-value,Python,Sorting,Dictionary,Key,Key Value,我试图从返回JSON对象的API中提取财务数据。API没有明确声明返回的字典是OrderedDicts,但是输出总是排序的,因此我假设它是 我需要检索字典中最后一个键的值,因为我需要最新的财务数据。但是,我无法明确使用密钥的名称来提取它,因为它是日期格式的,并且可能会根据使用查询的公司的不同而有所不同 我尝试将dictionary对象转换为列表,并使用索引-1选择最后一个键,但是转换过程似乎会随机化字典的顺序,不再检索最后一个日期 那么,我该如何检索字典中最后一个键的值呢 下面是一个JSON对象

我试图从返回JSON对象的API中提取财务数据。API没有明确声明返回的字典是OrderedDicts,但是输出总是排序的,因此我假设它是

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

我尝试将dictionary对象转换为列表,并使用索引-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} 

重新考虑这个问题后,我意识到,由于日期的格式是可以正确地作为字符串进行比较的,所以您可以只执行
k,v=max(data.items())
,但是如果您(或其他人查看此线程)使用的日期格式与我的原始答案不一样,则可以执行以下操作


您只需使用
max
builtin来比较字典的键,以确保它们都作为日期和时间进行比较。您可以使用
key
参数将它们作为日期时间对象进行比较:

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

重新考虑这个问题后,我意识到,由于日期的格式是可以正确地作为字符串进行比较的,所以您可以只执行
k,v=max(data.items())
,但是如果您(或其他人查看此线程)使用的日期格式与我的原始答案不一样,则可以执行以下操作


您只需使用
max
builtin来比较字典的键,以确保它们都作为日期和时间进行比较。您可以使用
key
参数将它们作为日期时间对象进行比较:

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


通常,如果API没有指定它实际执行的操作,则不应依赖它继续执行该操作。如果所有键都具有可比性,则最高值将是最新的,因此您可以使用
max(data.keys())
来获取最新的键,根据格式的不同,您可能需要指定一个
键=…
,以将日期转换为可以正确比较的格式。您可以将日期字符串转换为实际的
日期时间
对象,对其进行排序,并获得最大的一个。您不能依赖API的行为,因为它可能会在将来发生变化。只需通过将键转换为
datetime
对象来对字典进行排序。即使API返回的JSON已排序,但一旦通过JSON解析器运行,它也将不再排序。您可以让我们将键解析为时间,然后根据这些时间进行排序。通常,如果API没有指定它实际执行的操作,您不应该依赖它继续执行该操作。如果所有键都具有可比性,那么最高的键将是最新的键,因此您可以使用
max(data.keys())
来获取最新的键,根据格式的不同,您可能需要指定一个
键=…
,以将日期转换为可以正确比较的格式。您可以将日期字符串转换为实际的
日期时间
对象,对其进行排序,并获得最大的一个。您不能依赖API的行为,因为它可能会在将来发生变化。只需通过将键转换为
datetime
对象来对字典进行排序。即使API返回的JSON已排序,但一旦通过JSON解析器运行,它也将不再排序。您可以将键解析为时间,然后根据这些时间进行排序。实际上,
max(data.items(),key=…)
更像是OP想要检索与键关联的值。请确保,
converter
采用元组而不是时间戳。编写converter函数似乎更简单,只需处理键,然后只获取
value=data[highest]
,但绝对可以让它以这种方式处理。这很有意义。顺便说一句,你不需要
.keys()
。这仅仅是OP如何解决问题的三行摘要,我们不要深入到微观优化。我想要的是清晰和精确,所以我想让答案保持原样,但如果OP(或任何其他人)对进一步的优化/选项感兴趣,那么我想你的评论对他们会很有用。这种格式的一个主要特点是,从一年到几秒钟,你不需要解析它,只需要比较字符串就可以了吗?请参见。实际上,
max(data.items(),key=…)
更像它,因为OP希望检索与该键相关的值。请确保,
converter
采用元组而不是时间戳。编写converter函数似乎更简单,只需处理键,然后只获取
value=data[highest]
,但绝对可以让它以这种方式处理。这很有意义。顺便说一句,你不需要
.keys()
。这仅仅是OP如何解决问题的三行摘要,我们不要深入到微观优化。我想要的是清晰和精确,所以我想让答案保持原样,但如果OP(或任何其他人)对进一步的优化/选项感兴趣,那么我想你的评论对他们会很有用。这种格式的一个主要特点是,从一年到几秒钟,你不需要解析它,只需要比较字符串就可以了吗?看见