查找一年中的最大月份

Posted

技术标签:

【中文标题】查找一年中的最大月份【英文标题】:Finding the max month of a year 【发布时间】:2018-03-05 10:08:48 【问题描述】:

测试代码:

import calendar
from collections import Counter
dates = (
    '2017-05-01 11:45:35',
    '2017-06-01 11:45:35',
    '2017-06-01 11:45:35',
    '2017-07-01 11:45:35',
)
city_file = ['Start Time': d for d in dates]

c = Counter((calendar.month_name[int(month['Start Time'][5:7])] for month in city_file))

print(c)

谁能解释一下代码

 c = Counter((calendar.month_name[int(month['Start Time'][5:7])] for month in city_file))

尤其是部分,如果我输入 5:7 以外的任何内容,它会给出错误消息。

month['Start Time][5:7]

想要的输出:

月数示例 1 月 12 日 2 月 13 日

【问题讨论】:

期望的输出:月数示例 January 12 feb 13 【参考方案1】:

你可以逐步评估:

[d[5:7] for d in dates] #extract month from date string
#['05', '06', '06', '07']
[int(d[5:7]) for d in dates] #extract month from date string and convert to int
#[5, 6, 6, 7]
calendar.month_name[:] #get all month names
['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
[calendar.month_name[int(d[5:7])] for d in dates] #get month names that match month in dates
#['May', 'June', 'June', 'July']

一旦你弄清楚这个流程,你需要看看Counter。

【讨论】:

有没有简单的方法来做到这一点? 您的代码有效,为什么您需要它更简单【参考方案2】:

Start Time 包含 dates 值。

给定格式yyyy-mm-dd hh:mm:ss[5:7] 的范围是月份值。

【讨论】:

【参考方案3】:

您的月份变量是一个字典。通过使用month['Start Time'],您可以使用'Start Time' 键访问字典并返回您的时间字符串。 [5:7] 部分将从索引 5 开始并在索引 7 之前结束的字符分割从 month['Start Time] 中取出的字符串。这 [5:7] 与字符串的月份相关。然后,您将获取月份的字符串并将其转换为整数:int(month['Start Time'][5:7])。然后你有另一个对象calendar.month_name,它给出了你传递给它的键的月份名称。您对city_file 中的每个month 执行此操作。这将创建一个生成器对象(您可以将其视为一个列表)并将其传递给 Counter 对象。然后 Counter 对象从生成器中获取所有值并计算它们出现的次数。

【讨论】:

以上是关于查找一年中的最大月份的主要内容,如果未能解决你的问题,请参考以下文章

使用 map reduce 程序查找一年中每个月的最高温度

NSDateComponents setWeek - 本周查找

查找给定月份和年份中最后一天的名称

Spark SQL - 查找每年一个月的最大值

SQL Server 查找接近服务日期和月份的行

Python在轴上将一年中的日期转换为月份