python查找报告次数最多的月份

时间:2019-03-11 19:41:54

标签: regex string

我试图找出十月(提到过两次),我有主意使用字典来解决这个问题。但是,我很难解决如何查找/分隔月份的问题,无法将我的解决方案用于存在一些空格的第一个str值。有人可以建议我如何修改该拆分部分以覆盖-和空白吗?

 import re
    #str="May-29-1990, Oct-18-1980 ,Sept-1-1980, Oct-2-1990"

    str="May-29-1990,Oct-18-1980,Sept-1-1980,Oct-2-1990"

    val=re.split(',',str)

    monthList=[]
    myDictionary={}

    #put the months in a list
    def sep_month():
        for item in val:
            if not item.isdigit():
                month,day,year=item.split("-")

            monthList.append(month)

#process the month list from above
    def count_month():
        for item in monthList:
            if item not in myDictionary.keys():
                myDictionary[item]=1
            else:
                myDictionary[item]=myDictionary.get(item)+1

        for k,v in myDictionary.items():
            if v==2:
                print(k)

    sep_month()
    count_month()

2 个答案:

答案 0 :(得分:2)

from datetime import datetime
import calendar
from collections import Counter

datesString = "May-29-1990,Oct-18-1980,Sep-1-1980,Oct-2-1990"
datesListString = datesString.split(",")

datesList = []
for dateStr in datesListString:
    datesList.append(datetime.strptime(dateStr, '%b-%d-%Y'))

monthsOccurrencies = Counter((calendar.month_name[date.month] for date in datesList))

print(monthsOccurrencies)
# Counter({'October': 2, 'May': 1, 'September': 1})

我在本月使用%b的解决方案中需要注意的一点是,Sept已更改为Sep才能正常工作(月份是语言环境的缩写名称)。在这种情况下,您可以使用全名月份(%B)或缩写名称(%b)。如果不能使用正确的月份名称格式来设置大字符串,则只需替换错误的字符串(例如,将“ Sept”替换为“ Sep”,并始终使用日期obj)。

答案 1 :(得分:0)

不确定正则表达式是完成此工作的最佳工具,我只用strip()split()来处理您的空格问题,并获取仅列出月份缩写的列表。然后,您可以使用列表方法count()创建一个按月计数的字典。例如:

dates = 'May-29-1990, Oct-18-1980 ,Sept-1-1980, Oct-2-1990'

months = [d.split('-')[0].strip() for d in dates.split(',')]
month_counts = {m: months.count(m) for m in set(months)}

print(month_counts)
# {'May': 1, 'Oct': 2, 'Sept': 1}

使用collections.Counter甚至更好:

from collections import Counter

dates = 'May-29-1990, Oct-18-1980 ,Sept-1-1980, Oct-2-1990'

months = [d.split('-')[0].strip() for d in dates.split(',')]
month_counts = Counter(months)

print(month_counts)
# Counter({'Oct': 2, 'May': 1, 'Sept': 1})