如何在字典中结合Timestamp使用if-else并正确输出单次Yes?
问题分析与解决方案
问题原因
- 类型不匹配导致判断错误:字典中存储的是
Timestamp对象,你直接和字符串'2022-05-01 00:00:00'比较,两者类型不同,结果永远是False,所以触发了elif分支输出Maybe。 - 遍历全字典导致重复输出:循环会遍历字典的每一个键值对,每个键都会执行一次输出逻辑,因此会出现多次输出。
修改方案
方案1:直接通过键查找(推荐,更高效)
利用字典的键查找特性,无需遍历整个字典,直接判断输入的键是否存在,再对比时间:
from pandas import Timestamp # 确保导入Timestamp类 fruit_dict = {'Lemon': Timestamp('2022-05-01 00:00:00'), 'Orange': Timestamp('2020-09-06 00:00:00')} input_fruit = 'Lemon' # 注意加引号,用字符串表示输入的键 target_time = Timestamp('2022-05-01 00:00:00') # 转为同类型的Timestamp再比较 if input_fruit in fruit_dict: if fruit_dict[input_fruit] == target_time: print('Yes') else: print('Maybe') else: print('No')
方案2:遍历字典但找到匹配后终止循环
如果一定要用遍历,找到匹配的键后用break终止循环,避免后续不必要的遍历和输出:
from pandas import Timestamp fruit_dict = {'Lemon': Timestamp('2022-05-01 00:00:00'), 'Orange': Timestamp('2020-09-06 00:00:00')} input_fruit = 'Lemon' target_time = Timestamp('2022-05-01 00:00:00') found = False for k, v in fruit_dict.items(): if input_fruit == k: found = True if v == target_time: print('Yes') else: print('Maybe') break # 找到匹配键后立刻终止循环 if not found: print('No')
关键修改点说明
- 修正输入写法:把
input = Lemon改成input_fruit = 'Lemon',原代码中Lemon无引号会被当作变量,引发NameError,必须用字符串表示键。 - 统一时间类型:将目标时间转为
Timestamp对象,和字典中的值类型一致后再比较,确保判断准确。 - 避免重复输出:要么直接按键查找,要么找到匹配后终止循环,保证只输出一次结果。
内容的提问来源于stack exchange,提问作者kpop trash
相关产品推荐
相关产品推荐

