我试图找出十月(提到过两次),我有主意使用字典来解决这个问题。但是,我很难解决如何查找/分隔月份的问题,无法将我的解决方案用于存在一些空格的第一个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()
答案 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})