Python检查结果集中当前日期对应0/1状态问题求助
解决根据日期获取对应状态值的问题
你的核心需求应该是从包含(状态值, 日期)的结果集中,根据指定日期精准提取对应的状态(也就是元组的第一个元素,比如0L/1L)。之前的实现要么只能判断日期是否存在,要么修改后的函数调用逻辑有偏差,导致拿不到目标状态值。
直接有效的实现方案
我们可以写一个针对性的函数,直接根据目标日期从结果集中匹配并返回状态,找不到时返回None(你也可以换成业务需要的默认值):
def get_status_by_date(result_set, target_date): # 遍历结果集中的每个(状态, 日期)元组 for status, date in result_set: if date == target_date: # 找到匹配日期,返回对应状态 return status # 无匹配日期时返回None return None
用你的结果集做测试演示
假设你的结果集是:
import datetime result_set = ((0L, datetime.date(2018, 1, 29)), (0L, datetime.date(2018, 1, 30)), (0L, datetime.date(2018, 1, 31)), (0L, datetime.date(2018, 2, 1)))
如果要查询2018-01-30的状态,调用方式如下:
target_date = datetime.date(2018, 1, 30) status = get_status_by_date(result_set, target_date) print(status) # 输出 0L
如果查询一个不在结果集中的日期(比如2018-02-02),函数会返回None,你可以根据业务逻辑处理这种无匹配的情况。
为什么之前的尝试出问题?
你修改后的生成器版本return next(((s,d) for (s,d) in dates if d == date), None)逻辑本身没问题,但调用时犯了一个小错误:你需要把整个包含状态和日期的结果集传给函数,而不是只传提取出来的日期列表[x[1]...]。如果只传日期列表,函数里的(s,d)无法正确解构,自然拿不到状态值。
如果想用你修改后的生成器方案,正确的调用方式应该是这样:
def checkdate(result_set, target_date): return next(((s, d) for s, d in result_set if d == target_date), None) entry = checkdate(result_set, target_date) if entry: status, date = entry print(f"找到状态: {status}") else: print("该日期不在结果集中")
这样就能正确获取到对应日期的状态了。
内容的提问来源于stack exchange,提问作者Wesley van Straalen
相关产品推荐
相关产品推荐

