对包含日期和时间字符串元素的List进行排序

时间:2016-12-07 23:01:11

标签: python list

我需要协助按日期和时间对列表进行排序,日期和时间都是我列表中的字符串字段。

myList = ['item1', 'item2', 'mm/dd/yy', 'hh:mmAM', 'item3'] 

我正在使用Python 2.4.3。

我正在使用Bob Swift CLI从Atlassian的Confluence中提取页面信息并放入列表中,然后可以将其排序为首先显示最旧的页面。

示例数据:

pageList =“['Page Title','383551192','298288254','dt206xxx','1/7/16 1:05 PM','dt206xxx','1/7/16','1 :16PM','2','http://xx.xxx.xx.xx:8xxx/display/mine/PageTitle']“

我需要在元素6的最后修改日期和7的时间排序。

1 个答案:

答案 0 :(得分:0)

您需要将数据放在我认为您可能会执行的列表中。我改变了pageList,每个内部列表都有不同的时间。现在我们可以使用python的sort(),但是我们必须提供自己的比较函数。所以这里我们有pageList.sort(mySort)sort()传递两个列表项进行比较。这里的每个项目都是内部列表。我们需要将元素6和7组合在一起形成一个日期时间字符串;然后将其转换为python日期时间,以便我们可以比较它们。

由于元组很长,我只在排序后打印出内部列表中的日期和时间值,以显示它的工作原理。

import datetime

pageList =[['Page Title', '383551192', '298288254', 'dt206xxx', '1/7/16 1:05 PM', 'dt206xxx', '1/7/16', '1:56PM', '2', 'http://xx.xxx.xx.xx:8xxx/display/mine/PageTitle'],
           ['Page Title', '383551192', '298288254', 'dt206xxx', '1/7/16 1:05 PM', 'dt206xxx', '1/7/16', '1:46PM', '2', 'http://xx.xxx.xx.xx:8xxx/display/mine/PageTitle'],
           ['Page Title', '383551192', '298288254', 'dt206xxx', '1/7/16 1:05 PM', 'dt206xxx', '1/7/16', '1:56PM', '2', 'http://xx.xxx.xx.xx:8xxx/display/mine/PageTitle'],
           ['Page Title', '383551192', '298288254', 'dt206xxx', '1/7/16 1:05 PM', 'dt206xxx', '1/7/16', '1:16PM', '2', 'http://xx.xxx.xx.xx:8xxx/display/mine/PageTitle'],
           ['Page Title', '383551192', '298288254', 'dt206xxx', '1/7/16 1:05 PM', 'dt206xxx', '1/7/16', '1:36PM', '2', 'http://xx.xxx.xx.xx:8xxx/display/mine/PageTitle']]

def mySort(a,b):
    c = a[6] + ' ' + a[7]
    d = b[6] + ' ' + b[7]
    date1 = datetime.datetime.strptime(c, '%m/%d/%y %I:%M%p')
    date2 = datetime.datetime.strptime(d, '%m/%d/%y %I:%M%p')
    return cmp(date1, date2)

if __name__ == '__main__':
    pageList.sort(mySort)
    for i in range(len(pageList)):
        print i,pageList[i][6],' ',pageList[i][7]  

输出:
0 1/7/16 1:16 PM
1 1/7/16 1:36 PM
2 1/7/16 1:46 PM
3 1/7/16 1:56 PM
4 1/7/16 1:56 PM