按作为日期的键对字典排序



在开发电报机器人时,您需要按日期对字典进行排序,以便按时间顺序输出新闻。问题在于关键格式(日期)的不同。有格式%d。%m在%H: m %,还有%d %m。

for k,v in sorted(Dnews_dict.items(), key=lambda x: DT.strptime(x[1].get("time"),'%d.%m.%Y at %H:%M')):
news = f"<b>{v['time']}</b>n"
f"{hlink(v['title'],v['url'])}"
await message.answer(news)

这段代码工作得很好,但只有一个日期类型。作为一个选项,我尝试添加字符串长度条件(长度是恒定的)。

if len(round_data) == 18:
for k,v in sorted(Dnews_dict.items(), key=lambda x:DT.strptime(x[1].get("time"),'%d.%m.%Y в %H:%M')):
news = f"<b>{v['time']}</b>n"
f"{hlink(v['title'],v['url'])}"
await message.answer(news)
else:
for k,v in sorted(Dnews_dict.items(), key=lambda x:DT.strptime(x[1].get("time"),'%d.%m at %H:%M')):
news = f"<b>{v['time']}</b>n"
f"{hlink(v['title'],v['url'])}"
await message.answer(news)

但是条件不起作用。但这种情况行不通。如何解决这种困境?输入图片描述

虽然我不熟悉电报机器人,但下面是处理具有混合格式的日期时间数据的方法,如果您已经隔离了包含日期时间数据的特定文本:

给定一个混合日期时间字符串数据的列表,格式如下:

datelist = ['08.02.2022 at 23:53',
'13.07 at 18:13',
'23.11.2022 at 19:55',
'15.02 at 01:06',
'09.07.2022 at 14:57',
'09.08 at 04:06',
'19.04.2022 at 07:19',
'28.10 at 21:56',
'19.10.2022 at 02:18',
'23.04 at 18:15']  
from dateutil import parser    #Utility for handling all the messy dates you encounter along the way
from dateutil.relativedelta import *  
for dt in datelist:
print(parser.parse(dt))  

收益率:

2022-08-02 23:53:00
2023-01-13 18:13:00
2022-11-23 19:55:00
2023-01-15 01:06:00
2022-09-07 14:57:00
2023-01-09 04:06:00
2022-04-19 07:19:00
2023-01-28 21:56:00
2022-10-19 02:18:00
2023-01-23 18:15:00  

如果您关注的是2023年,您可以执行以下操作:

for dt in datelist:
dtx = parser.parse(dt)
if dtx.year == 2023:
dtx = dtx + relativedelta(year=2022)
print(dtx)  

生成一个关键到2022年的结果:

2022-08-02 23:53:00
2022-01-13 18:13:00
2022-11-23 19:55:00
2022-01-15 01:06:00
2022-09-07 14:57:00
2022-01-09 04:06:00
2022-04-19 07:19:00
2022-01-28 21:56:00
2022-10-19 02:18:00
2022-01-23 18:15:00

最新更新