我有一个像这样的字符串列表 正如您所知,在字符串的开头嵌入了一个日期 在字符串的末尾。
a = ["08/19/2014100%ABC10/02/2014F","02/12/2012100%ABC10/02/2014F",
"08/29/2014100%ABC10/02/2012F"]
我想根据日期子字符串对此列表进行排序。
我想要实现的方法是提取日期,对日期进行排序并使用子字符串加入日期,但它变得太复杂了。
答案 0 :(得分:1)
只需调用sorted()
,并将key
参数设置为一个函数,该函数将字符串中的日期提取并转换为datetime.datetime
对象。
>>> from datetime import datetime
>>> a = ["08/19/2014100%ABC10/02/2014F","02/12/2012100%ABC10/02/2014F", "08/29/2014100%ABC10/02/2012F"]
>>> sorted_a = sorted(a, key=lambda s: datetime.strptime(s[:10], '%m/%d/%Y'))
>>> sorted_a
['02/12/2012100%ABC10/02/2014F', '08/19/2014100%ABC10/02/2014F', '08/29/2014100%ABC10/02/2012F']
或者,如果您想进行排序:
>>> a.sort(key=lambda s: datetime.strptime(s[:10], '%m/%d/%Y'))
>>> a
['02/12/2012100%ABC10/02/2014F', '08/19/2014100%ABC10/02/2014F', '08/29/2014100%ABC10/02/2012F']
如果您实际上是要对字符串中的最后一个日期进行排序,只需将键功能更改为:
lambda s: datetime.strptime(s[-11:-1], '%m/%d/%Y')
答案 1 :(得分:0)
以下代码定义了一个自定义排序函数compare
,它从列表中获取两个元素,并根据每个字符串开头出现的日期对它们进行排序。如果要使用字符串末尾嵌入的日期,可以相应地修改代码。
def compare(item1, item2):
format = '%m/%d/%Y' #changed the date format
# convert string dates to Date type
date1 = datetime.datetime.strptime(item1[:10], format).date() #removed comma from item1[:,10]
date2 = datetime.datetime.strptime(item2[:10], format).date() #same as above
if date1 < date2:
return -1
elif date1 > date2:
return 1
else:
return 0
a = ["08/19/2014100%ABC10/02/2014F","02/12/2012100%ABC10/02/2014F",
"08/29/2014100%ABC10/02/2012F"]
a.sort(compare)