带有 class 变量的列表理解中的日期过滤器
Date filter in list-comphresion with class variable
我有一个列表 'users',其中包含 class 'user' 的对象。每个用户都有一个列表'records',其中包含class'record'的对象。每条记录都有一个日期时间变量,描述该特定记录的创建时间。
我想遍历我数据中的所有周,并找出哪些用户在那一周有记录。但是,如果我做类似
[record.datetime for user in users for record in user.records if dt < record.datetime < timedelta(days=7)]
不知道哪条记录属于哪个用户,无法识别具体周内有记录的用户。我如何识别用户?
我未完成的代码:
userWeeks = list()
# Loop over each week in data
for dt in rrule.rrule(rrule.WEEKLY, dtstart=firstMonday, until=lastMonday):
print dt
# Find users with records in interval
userSubset = [for user in users if user.records[...].contains()]
# Create a UserWeek if the user has records in that week
for user in userSubset:
tempUserWeek = UserWeek()
tempUserWeek.GrabInfoFromUser(user, dt, dt + timedelta(days=7))
userWeeks.append(tempUserWeek)
如果您同时想要记录和相关用户,您可以 return 列表理解中的(记录,用户)元组:
[(record, user)
for user in users
for record in user.records
if dt < record.datetime < timedelta(days=7)
]
根据 jonrsharpe 的评论,我意识到我当然可以只保留用户而不是记录。通过将列表转换为集合,每个用户只保留一个值:
userSubset = set([user for user in users for record in user.records if dt < record.datetime < dt + timedelta(days=7)])
我有一个列表 'users',其中包含 class 'user' 的对象。每个用户都有一个列表'records',其中包含class'record'的对象。每条记录都有一个日期时间变量,描述该特定记录的创建时间。
我想遍历我数据中的所有周,并找出哪些用户在那一周有记录。但是,如果我做类似
[record.datetime for user in users for record in user.records if dt < record.datetime < timedelta(days=7)]
不知道哪条记录属于哪个用户,无法识别具体周内有记录的用户。我如何识别用户?
我未完成的代码:
userWeeks = list()
# Loop over each week in data
for dt in rrule.rrule(rrule.WEEKLY, dtstart=firstMonday, until=lastMonday):
print dt
# Find users with records in interval
userSubset = [for user in users if user.records[...].contains()]
# Create a UserWeek if the user has records in that week
for user in userSubset:
tempUserWeek = UserWeek()
tempUserWeek.GrabInfoFromUser(user, dt, dt + timedelta(days=7))
userWeeks.append(tempUserWeek)
如果您同时想要记录和相关用户,您可以 return 列表理解中的(记录,用户)元组:
[(record, user)
for user in users
for record in user.records
if dt < record.datetime < timedelta(days=7)
]
根据 jonrsharpe 的评论,我意识到我当然可以只保留用户而不是记录。通过将列表转换为集合,每个用户只保留一个值:
userSubset = set([user for user in users for record in user.records if dt < record.datetime < dt + timedelta(days=7)])