【发布时间】:2018-01-16 08:02:38
【问题描述】:
我在字典seasons 中存储了以下month,day 元组:
seasons = {
'S1': (
((1, 10),(5, 31))
),
'S2': (
((9, 1),(1, 9))
),
'S3': (
((6, 1),(9, 30))
)
}
我想检查日期时间dt 位于哪个日期间隔,并相应地分配名称S1、S2 或S3。
我尝试这样做,但 start 和 end 似乎是数字而不是元组。
def getSeason(dt):
season = None
for t, ranges in seasons.items():
for start, end in ranges:
if date(dt.year,start(0),start(1)) <= dt.date() <= date(dt.year,end(0),end(1)):
season = t
break
if season is not None:
break
return season
【问题讨论】:
-
没有年份的日期毫无意义。您还应该存储年份。
-
@StevenRumbalski,OP 只是检查给定日期是否在一个季节内(秋季、春季等)。不需要一年。如果 OP 确实包含年份,那么使用 datetime.date 将是一个好主意。
-
@StevenRumbalski:我知道如何处理日期。就我而言,我需要没有年份的(月,日)对。嗯,我知道我应该解决的任务......
-
@Dinosaurius:如果您的数据不需要年份,它可能不应该重叠。
'S3'以(9, 30)结尾。'S2'开始于(9, 1)。除非在两个季节同时放置某些东西是有效的,否则您的标准是无效的。如果您依赖迭代顺序来让一个季节优先于另一个季节,那么使用 Python 字典将无济于事,因为迭代顺序不需要遵循定义顺序。 -
@Dinosaurius:您的数据另有说明。这就是问题所在。
标签: python python-2.7 datetime dictionary tuples