Sorting Strings of Dates in Python, Preferably Without Using Date Objects
所以,我有一个字符串列表,这些字符串的格式都是Month DayNumber,比如
1 | ['March 1', 'March 9', 'April 14', 'March 12'] |
我需要对列表进行排序,以便所有日期都按日历中的顺序排列。有什么小窍门吗?是否有内置方法可以帮助我,或者我应该使用lambda设计自定义排序?
您可以使用熊猫模块。用PIP安装。
你可以这样做:
1 2 3 4 5 6 7 8 9 10 | import pandas as pd dates = ['March 1', 'March 9', 'April 14', 'March 12'] df = pd.DataFrame(dates) df = pd.to_datetime(df[0], format="%B %d") df=df.sort_values() print (df) |
此日期时间格式非常有用,例如,如果您希望列表元素的日期或月份只执行以下操作:
1 2 | df.month df.day |
一种方法是使用
1 2 3 4 5 6 7 | import numpy as np from datetime import datetime lst = ['March 1', 'March 9', 'April 14', 'March 12'] arr = np.array(lst) res = arr[np.argsort([datetime.strptime(i+' 2018', '%B %d %Y') for i in lst])].tolist() |
结果:
1 | ['March 1', 'March 9', 'March 12', 'April 14'] |
这是可能的,因为在内部,日期只是数字数据。在这种情况下,我们附上一个任意的2018年来创建
您还可以利用日历模块:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from calendar import month_name months = list(month_name) def parser (text): """Parses 'englishmonthname_whitespace_day-number' into string 'monthNR.dayNr'. Will pad a zero to allow for string based sorting.""" try: month,day = text.split() monthAsIdx = months.index(month.strip()) return '{:02d}.{:02d}'.format(monthAsIdx,int(day)) # return index in list.days except (ValueError, IndexError): # ValueError if not enough elements in string, # IndexError if not in list of month names return"99.99" # put last - all errors are put last w/o specific reordering dates = ['TooFew', 'EnoughBut NotInList', 'March 1', 'March 9', 'April 14', 'March 12'] for n in dates: print(parser(n)) sortedDates = sorted(dates, key=lambda x: parser(x)) print(sortedDates) |
输出:
1 2 3 4 5 6 7 8 9 10 | # result of parser() 99.99 99.99 03.01 03.09 04.14 03.12 # sorted by key/lambda ['March 1', 'March 9', 'March 12', 'April 14', 'TooFew', 'EnoughBut NotInList'] |
您可能想回顾一下这个问题:将字符串转换成日期时间
在分析之后,您可以根据从分析字符串到日期时间对象(可排序)中获得的值按日期排序。
可能性:
- 使用字典并使用
key/value 。 - 使用字符串匹配(regex)
- 更多…
或者谷歌,使用以下任何一个:
将字符串转换为日期时间
在python上将字符串转换为日期类型
如何在python中将字符串日期转换为datetime格式?
要提供可能的解决方案:
1 2 3 | Input_list = [{'month':'March', 'day':30}, {'month':'March', 'day':10}] newlist = sorted(Input_list, key=lambda k: k['month']) |