Как отфильтровать подсловарь из списка словарей на основе диапазона дат

Мне нужно отфильтровать подсловарь из списка словарей на основе диапазона дат

вот мой список:

[{'5-jan-2019': '34'}, {'10-jan-2019': '34'}, {'21-jan-2019': '12'}, {'25-jan-2019': '34'} , {'5-feb-2019': '34'}]

Мне нужно отфильтровать все подсловари в диапазоне дат, например

from_date-'5-jan-2019' and  to_date-'25-jan-2019'

и добавить его в новый словарь

ожидаемый результат

{
    '5-jan-2019': '34',
    '10-jan-2019': '34',
    '21-jan-2019': '12',
    '25-jan-2019': '34'
}
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
522
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать модуль datetime для использования встроенных методов сравнения (__lt__ и т. д.) объекта datatime.datetime:

import datetime
data = [{'5-jan-2019': '34'}, {'10-jan-2019': '34'}, {'21-jan-2019': '12'}, {'25-jan-2019': '34'} , {'5-feb-2019': '34'}]
start, end = '5-jan-2019', '25-jan-2019'

def d_form(d):
   months = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
   _d, _m, _y = d.split('-')
   return datetime.datetime(int(_y), months.index(_m)+1, int(_d))

start, end = d_form(start), d_form(end)
final_result = [i for i in data if start <= d_form(list(i.keys())[0]) <= end]

Выход:

[{'5-jan-2019': '34'}, 
 {'10-jan-2019': '34'}, 
 {'21-jan-2019': '12'}, 
 {'25-jan-2019': '34'}]
Ответ принят как подходящий

Вы хотите, чтобы datetime.strptime преобразовывал строки в объекты даты и времени, которые затем можно сравнивать друг с другом.

from datetime import datetime

lst = [
    {'5-jan-2019': '34'},
    {'10-jan-2019': '34'},
    {'21-jan-2019': '12'},
    {'25-jan-2019': '34'},
    {'5-feb-2019': '34'},
    ]

dt_from_str = lambda dt: datetime.strptime(dt, '%d-%b-%Y')

start_date = dt_from_str('5-jan-2019')
end_date = dt_from_str('25-jan-2019')

new_dict = {}
for sub_dict in lst:
    for key, val in sub_dict.items():
        if start_date <= dt_from_str(key) <= end_date:
            new_dict[key] = val

print(new_dict)

выход:

{
    '5-jan-2019': '34',
    '10-jan-2019': '34',
    '21-jan-2019': '12',
    '25-jan-2019': '34',
}

Другие вопросы по теме