Найти ближайшую метку времени (из массива словарей) к данной метке времени - PullRequest
2 голосов
/ 29 марта 2019

Имея следующий список словарей, который включает отметку времени (в строковом значении) и значение:

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 Я хочуreturn: {'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 Ответ

2 голосов
/ 29 марта 2019

Используйте datetime для преобразования строки в объект даты и времени и используйте min

Ex:

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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...