python中基于日期的过滤字典?
我有一本字典,看起来像这样,日期是字符串格式的:-python中基于日期的过滤字典?,python,Python,我有一本字典,看起来像这样,日期是字符串格式的:- { "2021-04-21" : "Shoes", "2021-04-07" : "Clothes" "2021-03-19" : "Chocolates" "2021-03-12" : "Flowers", "2021-03-03" : "
{ "2021-04-21" : "Shoes",
"2021-04-07" : "Clothes"
"2021-03-19" : "Chocolates"
"2021-03-12" : "Flowers",
"2021-03-03" : "Gloves" }
我创建dict的方式是通过一个列表:-
my_order_dictionary = {s[:10]: s[10:] for s in output[1:]}
我试图从今天获取30天前的日期的值,因此我做到了:-
d = datetime.today() - timedelta(days=30)
for key,value in my_order_dictionary.items():
if (key < d):
print(value)
d=datetime.today()-timedelta(天=30)
对于键,在my_order_dictionary.items()中输入值:
如果(键
但我得到了以下错误:-
if (key < d):
TypeError: '<' not supported between instances of 'str' and 'datetime.datetime'
if(键 TypeError:“键
是一个字符串d
是一个datetime
。您必须将字符串日期转换为datetime
。你有一个一致的格式;我希望你能用你已经知道的来处理转换,是吗
例如:
my_order_dictionary = {datetime.strptime(s[:10], "%y-%m-%d")): s[10:]
for s in output[1:]}
这是因为键
是一个str值
根据字典初始化,每个键都是一个字符串。
因为你在字典的每个键中循环,所以键
变量也是字符串。不能将字符串与DateTime对象进行比较
您可以使用将字符串转换为datetime对象。您可以将d
格式化为字符串,以便与字典键进行比较
d = (datetime.today() - timedelta(days=30)).strftime('%Y-%m-%d')
您必须将日期时间(以字符串形式给出)强制转换为python日期时间对象,以便与d
进行比较。你可以用datetime的方法来做。
您必须更改if语句以获得所需的行为
if (datetime.strptime(key, '%Y-%m-%d') < d):
if(datetime.strtime(键'%Y-%m-%d')
“您必须将字符串日期转换为datetime
”-为什么他们不能将日期时间转换为字符串日期?在我看来,这也会更有效,因为它只需要一次转换。事实上,字符串的排序顺序也可以用来比较日期。然而,内置的日期比较也相当快。我选择转换为datetime,因为这将比字符串更“自然”地支持将来的使用。