我有一个包含日期字符串的列表;不仅仅是几个月(" 1月x"," 2月x"),还有季度(" x年第1季度,"年度第2季度) x")和季节和年份。四季是#34;冬天" (第x年10月到第x + 1年3月)和"夏季",定义为年份x到年9月的4月。
我想对从每年Jan
到Dec
的月份进行排序,然后在定义的三个月后添加季度,然后在定义它们的6个月后添加季节,最后在定义它们的12个月之后的那一年。
所以,假设年份是2000
,我需要通过这些步骤才能获得结束列表:
对一年中的几个月进行排序:
我会得到:
Jan 2000, Feb 2000, Mar 2000, Apr 2000, May 2000, Jun 2000, Jul 2000, Aug 2000,
Sep 2000, Oct 2000, Nov 2000, Dec 2000
添加宿舍:
Jan 2000, Feb 2000, Mar 2000, Q1 2000,Apr 2000, May 2000, Jun 2000,Q2 2000, Jul 2000,
Aug 2000, Sep 2000, Q3 2000,Oct 2000, Nov 2000, Dec 2000, Q4 2000
添加季节:
Jan 2000, Feb 2000, Mar 2000, Q1 2000, Win 1999, Apr 2000, May 2000, Jun 2000,Q2 2000,
Jul 2000,Aug 2000, Sep 2000, Q3 2000, Sum 2000, Oct 2000, Nov 2000, Dec 2000, Q4 2000
最后一步,添加年份:
Jan 2000, Feb 2000, Mar 2000, Q1 2000, Win 1999, Apr 2000, May 2000, Jun 2000, Q2 2000,
Jul 2000,Aug 2000, Sep 2000, Q3 2000, Sum 2000, Oct 2000, Nov 2000, Dec 2000, Q4 2000,
Year 2000
请记住,这些都是字符串而不是整数。我开始的列表是:
temp2 = ['2015',
'2016',
'2017',
'2018',
'2019',
'2020',
'Apr-14',
'Apr-15',
'Apr-16',
'Apr-17',
'Aug-14',
'Aug-15',
'Aug-16',
'Dec-14',
'Dec-15',
'Dec-16',
'Feb-14',
'Feb-15',
'Feb-16',
'Feb-17',
'Jan-15',
'Jan-16',
'Jan-17',
'Jul-14',
'Jul-15',
'Jul-16',
'Jun-14',
'Jun-15',
'Jun-16',
'Mar-14',
'Mar-15',
'Mar-16',
'Mar-17',
'May-14',
'May-15',
'May-16',
'Nov-14',
'Nov-15',
'Nov-16',
'Oct-14',
'Oct-15',
'Oct-16',
'Q115',
'Q116',
'Q117',
'Q214',
'Q215',
'Q216',
'Q217',
'Q314',
'Q315',
'Q316',
'Q414',
'Q415',
'Q416',
'Q417',
'Sep-14',
'Sep-15',
'Sep-16',
'Sum 14',
'Sum 15',
'Sum 16',
'Sum 17',
'Sum 18',
'Win 14',
'Win 15',
'Win 16',
'Win 17',
'Win 18',
'Win 19']
我试过的是:
temp3 = {}
for i in range(len(temp2)):
if temp2[i][0] == '2':
temp3[temp2[i][2:]] = list()
for i in range(len(temp2)):
for key in temp3:
if temp2[i][2:] == key:
temp3[key].append(temp2[i])
然后我感到难过,因为我不知道如何获得那一年的月份,而不是一无所获。
答案 0 :(得分:0)
您需要先将它们全部转换为相同的格式,然后排序。因此,使用以下内容转换为日期格式:
from dateutil import parser
SEASONS = {"Win" : "Feb",
"Spr" : "May",
"Sum" : "Aug",
"Aut" : "Nov"}
def convert_to_date(date_string):
if date_string.startswith("Q"):
quarter = int(date_string[1])
month = str(quarter * 3)
return parser.parse("{}-{}".format(month, date_string[2:]))
elif date_string.startswith(tuple(SEASONS.keys())):
month = SEASONS[date_string[:3]]
return parser.parse("{}-{}".format(month, date_string.split(" ")[1]))
else:
return parser.parse(date_string)
请注意,这会根据评论将季节放在上个月。
您可能需要pip install python-dateutil
。那么排序应该是微不足道的:
sorted_list = sorted(temp2, key=convert_to_date)
答案 1 :(得分:-1)