У меня есть (большой) список словарей, содержащих задачи и их метаданные, извлеченные из Wunderlist. Название списка: tasktotal
. Эти словари в списке выглядеть следующим образом:Python: сравнение даты с датой в списке словарей
{'due_date': '2016-11-30', 'created_by_request_id': 'RqID:RqIDKey', 'type': 'task', 'title': 'This is a task ', 'completed': False, 'id': MYID, 'created_by_id': MYID, 'created_at': '2016-10-14T11:11:52.916Z', 'revision': 2, 'starred': False, 'list_id': MYLISTID}
Я хотел бы сравнить «due_date» значение текущей даты с помощью datetime
:
date_today = datetime.datetime.now().date()
Если dictinary связано сегодня или в любой день до того сегодня я хотел бы вернуть значение «title» из этого словаря. Я полагал, что самым простым способом было бы создать новый словарь со всеми записями, которые должны появиться сегодня, а затем получить их значения «title». Так что я сделал эту функцию поиска:
def search(i):
return [element for element in i if element[datetime.strptime('due_date')] >= date_today]
Однако, когда я запускаю этот поиск на моем tasktotal
список, я получаю ничего не вернулось.
print(search(tasktotal))
[]
Process finished with exit code 0
Я не понимаю, что я здесь делаю неправильно? Или может быть еще один более эффективный способ получить нужные мне ценности?
EDIT 1:
При попытке решения по @Peter, я получаю эту ошибку:
return [element['title'] for element in i if date_convert(element['due_date']) >= current_time]
KeyError: 'due_date
EDIT 2: Когда я включаю мои скобки, как @James K и @RichSmith предложил, я получаю эту ошибку
return [element for element in i if datetime.strptime(element['due_date'], "%Y-%m-%d") >= date_today]
TypeError: can't compare datetime.datetime to datetime.date
Возможно, вы захотите ответить на каждый ответ конкретными сообщениями для ответа. –
Извините, совершенно новый здесь, спасибо за подсказку! –