我正在尝试创建某种时间表日历。我首先要做的是创建一个列表,只需添加字典数据,输出如下:
week_day:显示当前数据字段的周
module_id:显示当前数据字段链接到的位置(因为每天都有X个模块)
day :它链接到的当前日期
course :只是第二天的元数据,在本例中是一门课程。
from datetime import date, timedelta
list = []
d1 = {'week_day': 50, 'module_id': 1, 'day' : 8, 'course' : 'Course1'}
d2 = {'week_day': 50, 'module_id': 2, 'day' : 8, 'course' : 'Course2'}
d3 = {'week_day': 50, 'module_id': 1, 'day' : 9, 'course' : 'Course3'}
d4 = {'week_day': 50, 'module_id': 3, 'day' : 10, 'course' : 'Course4'}
d5 = {'week_day': 50, 'module_id': 2, 'day' : 11, 'course' : 'Course5'}
d6 = {'week_day': 50, 'module_id': 1, 'day' : 12, 'course' : 'Course6'}
d7 = {'week_day': 51, 'module_id': 1, 'day' : 15, 'course' : 'Course7'}
d8 = {'week_day': 51, 'module_id': 1, 'day' : 16, 'course' : 'Course8'}
list.append(d1)
list.append(d2)
list.append(d3)
list.append(d4)
list.append(d5)
list.append(d6)
list.append(d7)
list.append(d8)作为一个测试,我只是给一天有4个模块,ID号(int)。
module = [1, 2, 3, 4]我的方法得到当前的日子所选的周和年。我用的是头5天。
def get_week_days(year, week):
"""
will get all the '5 working days' in the week, it will print the week name.
based on the corresponding year and weeknumber
"""
d = date(year,1,1)
d = d - timedelta(d.weekday())
dlt = timedelta(days = (week-1)*7)
start_date = d + dlt
end_date = d + dlt + timedelta(days=4)
list = []
while True:
dict = {
'dayname' : '{:%A}'.format(start_date),
'date' : int('{:%d}'.format(start_date))
}
list.append((dict))
start_date = start_date + timedelta(days=1)
if start_date > end_date:
break
return list现在我的问题来了,我可以从接下来的几周和一年中得到数据。但我不知道如何实现模块,并打印空数据,如果模块到链接日没有数据。
for x in get_week_days(2014, 50):
for y in list:
if x['date'] == y['day']:
print(y['course'])它应该打印什么?
因此,它必须打印5个工作日的所有课程,它应该像这样打印第1天(本例中为第8天)。
{“周_日”:50,“模块_id”:1,“天”:8,“课程”:'Course1'}
{“周_日”:50,“模块_id”:2,“天”:8,“课程”:'Course2'}
“空”
“空”
然后继续到第2天(本例中为第9天)
{“周_日”:50,“模块_id”:1,“天”:9,“课程”:'Course3'}
“空”
“空”
“空”
以此类推,但正如您所看到的,它也应该与相应的模块一起打印,如果没有使用模块id的过程,则应该打印空字符串或其他内容。
发布于 2014-12-11 12:18:05
我不确定我是否完全理解你的问题,但这里似乎是一个快速解决办法。
for x in get_week_days(2014, 50):
x_mod = [False for _ in module]
for y in list:
if x['date'] == y['day']:
x_mod[y['module_id']-1] = y
for my_module in x_mod:
print(my_module if my_module else 'empty')但是,更改算法以使其更具有可伸缩性可能是明智的。例如,如果事件是按日期排序的,如您的示例中所示,您不需要经常检查每个条目,只需进行一次遍历就足够了。
(顺便说一句,避免将list用作变量名。)
https://stackoverflow.com/questions/27421689
复制相似问题