查找(从词典数组中)最接近给定时间戳的时间戳

时间:2019-03-29 13:17:21

标签: python date dictionary

具有以下词典列表,其中包括时间戳记(以字符串值形式)和一个值:

my_example = [{'timestamp': '2009-11-10T23:00:01Z', 'value': 1}, {'timestamp': '2009-11-10T23:00:05Z', 'value': 2}, {'timestamp': '2009-11-10T23:00:20Z', 'value': 3}]

我想要一个给定的时间戳值(字符串格式),找到最接近的值。

这意味着:

  • 如果给定的时间戳是2009-11-10T23:00:02Z,我想返回:{'timestamp': '2009-11-10T23:00:01Z', 'value': 1}
  • 如果给定的时间戳是2009-11-10T23:00:04Z,我想返回:{'timestamp': '2009-11-10T23:00:05Z', 'value': 2}
  • 如果给定的时间戳是2009-11-10T23:00:15Z,我想返回:{'timestamp': '2009-11-10T23:00:15Z', 'value': 3}

有人可以帮我吗?

例如,我知道有一个内置函数可以使整数列表变魔术,但是我不知道如何使它与日期一起使用:

min(myList, key=lambda x:abs(x-myNumber))

预先感谢

1 个答案:

答案 0 :(得分:2)

使用datetime将字符串转换为日期时间对象,并使用min

例如:

import datetime
my_example = [{'timestamp': '2009-11-10T23:00:01Z', 'value': 1}, {'timestamp': '2009-11-10T23:00:05Z', 'value': 2}, {'timestamp': '2009-11-10T23:00:20Z', 'value': 3}]

myNumber = "2009-11-10T23:00:02Z"
myNumber = datetime.datetime.strptime(myNumber, "%Y-%m-%dT%H:%M:%SZ")
print(min(my_example, key=lambda x:abs(datetime.datetime.strptime(x["timestamp"], "%Y-%m-%dT%H:%M:%SZ") - myNumber)))