我目前有一个包含以下数据的结果集:
((0L, datetime.date(2018, 1, 29)), (0L, datetime.date(2018, 1, 30)), (0L,
datetime.date(2018, 1, 31)), (0L, datetime.date(2018, 2, 1)))
我正在尝试检查当前日期的状态是0还是1.
目前我这样做:
if checkdate():
if result_set[0] == 1:
checkdate函数检查当前日期是否在列表中。 但在那里我试图弄清楚该日期是否具有状态1或0.状态是列表中的第一项(0l和1L)mysql以某种方式在0和1之后添加L。
目前我的checkdate功能如下所示:
return any(d[1] == cd for d in result_set)
会喜欢一些帮助!
编辑:现在,checkdate
看起来像这样:
return next(((s,d) for (s,d) in dates if d == date), None)
entry = checkdate([x[1] for x in result_set], cd)
if entry is not None:
答案 0 :(得分:1)
您应该更改checkdate
功能以返回实际的(status, date)
对,而不仅仅是这样一对是否存在。为此,您可以将any
表达式几乎1:1转换为next
语句,如果不存在此类对,则使用None
作为默认值。
例如,像这样(我也改变了函数来获取参数而不是使用全局变量,但这对于它来说并不重要)。
import datetime
result_set = ((0, datetime.date(2018, 1, 29)), (1, datetime.date(2018, 1, 30)),
(0, datetime.date(2018, 1, 31)), (0, datetime.date(2018, 2, 1)))
cd = datetime.date(2018, 1, 30)
def checkdate(dates, date):
return next(((s, d) for (s, d) in dates if d == date), None)
entry = checkdate(result_set, cd)
if entry is not None and entry[0] == 1:
print("found")
或者像这样,如果您更喜欢使用全球result_set
和cd
变量:
def checkdate():
return next(((s, d) for (s, d) in result_set if d == cd), None)
entry = checkdate()
if entry is not None and entry[0] == 1:
print("found")
答案 1 :(得分:0)
更改函数checkdate
以返回列表中当前日期的索引,如果不存在,则返回-1。
然后你可以简单地做一些事情:
index = checkdate()
if index >= 0 and result_set[index][0] == 1:
...