为了账号安全,请及时绑定邮箱和手机立即绑定

使用日期时间聚合字典

使用日期时间聚合字典

米脂 2021-10-26 10:09:18
我有一个WO格式的字典:WO = {datetime: {'V1', 'V2', 'V3', 'V4'}}datetime(示例)格式的关键在哪里:datetime.date(2014, 6, 20)并且V1通过V4是包含浮动值的列表。例子:WO = {datetime.date(2014, 12, 20): {'V1': [11, 15, 19],                                     'V2': [12, 3, 4],                                     'V3': [50, 55, 56],                                     'V4': [100, 112, 45]},      datetime.date(2014, 12, 21): {'V1': [10, 12, 9],                                     'V2': [16, 13, 40],                                     'V3': [150, 155, 156],                                     'V4': [1100, 1132, 457]},      datetime.date(2014, 12, 22): {'V1': [107, 172, 79],                                     'V2': [124, 43, 44],                                     'V3': [503, 552, 561],                                     'V4': [1000, 1128, 457]}}如果我想在聚合值V1通过对V4根据本周对于给定的日期,例如:my_date = datetime.date(2014, 5, 23)对于这个给定的日期,聚合本周V1到 到 的所有值V4,该周从星期一开始。year, week, weekday = datetime.date(my_date).isocalendar()这行给了我这个特定日期的星期和工作日。如果我有一个函数:def week(date):    '''    date is in 'datetime.date(year, month, date)' format    This function is supposed to aggregate values in 'V1', 'V2', 'V3' and     'V4' for a whole week according to the parameter 'date'    '''接下来我应该如何定义这样的函数?
查看完整描述

3 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

据我了解,您想对给定日期的给定周的所有 V1...V4 值进行一些操作。首先,我将从查找给定日期的星期一(周开始)开始。


year, week, weekday = my_date.isocalendar()     

last_monday_date = my_date - datetime.timedelta(days = weekday - 1)

会给你最后一个星期一的日期。

最后在循环的日期范围内迭代 WO 值并获得结果。


查看完整回答
反对 回复 2021-10-26
?
UYOU

TA贡献1878条经验 获得超4个赞

您可以使用嵌套defaultdict从同一周收集数据,使用周数作为键(或其他一些可散列的标识符)。然后使用嵌套的字典理解来对您的列表列表进行元素求和。


from collections import defaultdict


dd = defaultdict(lambda: defaultdict(list))


for k1, v1 in WO.items():

    for k2, v2 in v1.items():

        dd[k1.isocalendar()[1]][k2].append(v2)


WO_agg = {k1: {k2: list(map(sum, zip(*v2))) for k2, v2 in v1.items()} \

          for k1, v1 in dd.items()}


print(WO_agg)

# {51: {'V1': [21, 27, 28],

#       'V2': [28, 16, 44],

#       'V3': [200, 210, 212],

#       'V4': [1200, 1244, 502]},

#  52: {'V1': [107, 172, 79],

#       'V2': [124, 43, 44],

#       'V3': [503, 552, 561],

#       'V4': [1000, 1128, 457]}}


查看完整回答
反对 回复 2021-10-26
  • 3 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号