使用日期时间聚合字典

我有一个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'

    '''

接下来我应该如何定义这样的函数?


米脂
浏览 174回答 3
3回答

一只甜甜圈

据我了解,您想对给定日期的给定周的所有 V1...V4 值进行一些操作。首先,我将从查找给定日期的星期一(周开始)开始。year, week, weekday = my_date.isocalendar()     last_monday_date = my_date - datetime.timedelta(days = weekday - 1)会给你最后一个星期一的日期。最后在循环的日期范围内迭代 WO 值并获得结果。

UYOU

您可以使用嵌套defaultdict从同一周收集数据,使用周数作为键(或其他一些可散列的标识符)。然后使用嵌套的字典理解来对您的列表列表进行元素求和。from collections import defaultdictdd = 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]}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python