You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在if-else语句中正确比较字典中的datetime.date值?

问题:如何正确比较字典中的datetime.date类型值与输入字符串?

我想在if-else语句中比较字典里的datetime.date类型值,但试了几种字符串格式都不对,代码如下:

import datetime
dict = {'monday': datetime.date(2021, 8, 7)}
day_input = input('Enter day: ')

字典里的值输出是2021-08-07,我尝试用'2021-08-07'和'2021, 8, 7'两种格式比较,结果都输出“No”,预期应该是“Yes”:

if dict[day_input] == '2021, 8, 7':
    print('Yes')
else: 
    print('No')

请问该怎么正确处理?


解决方案

核心问题是类型不匹配:字典里存储的是datetime.date对象,而你拿来比较的是字符串——不同类型的对象永远不会相等,所以不管字符串格式怎么写都会进入else分支。

有两种可行的解决方式:

方式1:将datetime.date对象转为字符串后比较

datetime.date对象的str()或isoformat()方法会默认输出YYYY-MM-DD格式的字符串,和你看到的输出格式完全一致,直接转换后再和目标字符串比较即可:

import datetime

# 避免用dict作为变量名,它是Python内置类型,建议改成day_dict
day_dict = {'monday': datetime.date(2021, 8, 7)}
day_input = input('Enter day: ')

if str(day_dict[day_input]) == '2021-08-07':
    print('Yes')
else:
    print('No')

如果用户输入的就是日期字符串(比如输入2021-08-07),也可以直接和转换后的字符串对比:

if str(day_dict[day_input]) == day_input:
    print('Yes')
else:
    print('No')

方式2:将输入字符串转为datetime.date对象后比较

如果希望逻辑更严谨(比如避免字符串格式不规范的问题),可以把输入的字符串解析成datetime.date对象,再和字典里的对象比较:

import datetime

day_dict = {'monday': datetime.date(2021, 8, 7)}
# 提示用户输入规范格式
day_input_str = input('Enter date (YYYY-MM-DD): ')

try:
    # 把输入字符串解析为date对象
    input_date = datetime.datetime.strptime(day_input_str, '%Y-%m-%d').date()
    # 这里假设你要对比的是字典中'monday'对应的值,可根据实际需求调整
    if day_dict['monday'] == input_date:
        print('Yes')
    else:
        print('No')
except ValueError:
    print('输入格式错误,请按YYYY-MM-DD格式输入')

内容的提问来源于stack exchange,提问作者kpop trash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:46:03