首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中按年分组列表和按月分组

python中按年分组列表和按月分组
EN

Stack Overflow用户
提问于 2018-09-10 16:11:44
回答 1查看 538关注 0票数 0

假设我有一个这样的列表:

代码语言:javascript
复制
list = [["A",datetime.datetime(1985,8,31,0,0)], ["B",datetime.datetime(2014,4,3,0,0)], ["C",datetime.datetime(2014,4,4,0,0)],["D",datetime.datetime(2014,6,9,0,0)], ["E",datetime.datetime(2015,6,1,0,0)], ["F",datetime.datetime(2015,2,7,0,0)]]

我如何才能最优雅地按年份分组,并按月分组,以便在Python中获得此列表输出,例如:

代码语言:javascript
复制
newlist = [["A",datetime.datetime(1985,8,31,0,0)], [[["B",datetime.datetime(2014,4,3,0,0)], ["C",datetime.datetime(2014,4,4,0,0)]],["D",datetime.datetime(2014,6,9,0,0)]], [["E",datetime.datetime(2015,6,1,0,0)], ["F",datetime.datetime(2015,2,7,0,0)]]]

因此,值按年分组,然后按月分组,顺序是保留。我正在代码中导入datetime模块

代码语言:javascript
复制
import datetime

和应用strptime

代码语言:javascript
复制
kdate=year/month/day
date = datetime.datetime.strptime(kdate , "%m/%d/%Y")

而不是将日期保存在列表中。列表如下所示

EN

回答 1

Stack Overflow用户

发布于 2018-09-10 22:56:03

通过使用itertools.groupby,您可以按年分组,然后按月分组。

这个表达式有点复杂,需要在应用任何groupby表达式之前对初始列表进行排序,但它可以获得不错的结果。

代码语言:javascript
复制
newlist = [[list(subgroup) for _, subgroup in groupby(group, key=lambda i: i[1].strftime("%m"))] for _, group in groupby(sorted(mylist, key=lambda i: i[1].strftime("%Y%m%d")), key=lambda i: i[1].strftime("%Y"))]

初始列表使用模式CCYYMMDD按年、月和日进行排序。然后按年份对已排序列表进行分组。结果列表最终按月份分组。

这将返回一个3级列表,该列表由以下内容组成:

  • 子列表枚举初始列表中存在的每个不同的年份。
  • 年子列表由枚举相对于年份的每个不同月份的子列表组成。
  • 月份子列表最终由相对于月份和年份的组组成。这些最低的子列表按升序排列。

这是从你的列表中得到的结果:

代码语言:javascript
复制
[[[['A', datetime.datetime(1985, 8, 31, 0, 0)]]], [[['B', datetime.datetime(2014, 4, 3, 0, 0)], ['C', datetime.datetime(2014, 4, 4, 0, 0)]], [['D', datetime.datetime(2014, 6, 9, 0, 0)]]], [[['F', datetime.datetime(2015, 2, 7, 0, 0)]], [['E', datetime.datetime(2015, 6, 1, 0, 0)]]]]

这并不完全是你所期望的。但这种结构的有趣之处在于,它尊重日嵌套在月中,月嵌套在年中。它可以很容易地用作循环结构的输入(例如)。

代码语言:javascript
复制
for year in newlist:
    for month in year:
        for day in month:
            # some code here.

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52253577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档