带有 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)])