按时间跨度对元组列表进行排序

2024-09-30 22:14:48 发布

您现在位置:Python中文网/ 问答频道 /正文

content_dict = [(u'Bowe Bergdahl', [u'Sat, 31 May 2014 16:03:32 EDT']), (u"U.S. 'hypocrisy' in cybertheft charge", [u'Fri, 23 May 2014 02:30:44 EDT'])

此lambda函数有什么问题:

^{pr2}$

我得到以下错误:

^{pr3}$

Tags: lambda函数incontentsatdictmaycharge
3条回答

你的代码有几个问题。您省略了年份%Y,从而使strptime格式不正确。您还将日期附在一个导致其他问题的列表中。您试图使用x[0],而您的日期被括在x[1]中。下面是一个(几乎所有)代码的工作示例(请注意,时区已被删除)。原因见下文)。在

>>> content = [(u'Bowe Bergdahl',u'Sat, 31 May 2014 16:03:32'), (u"U.S. 'hypocrisy' in cybertheft charge", u'Fri, 23 May 2014 02:30:44')]
>>> content2 = sorted(content, key=lambda x:datetime.datetime.strptime(x[1], '%a, %d %B %Y %H:%M:%S'))
>>> content2
[(u"U.S. 'hypocrisy' in cybertheft charge", u'Fri, 23 May 2014 02:30:44'), (u'Bowe Bergdahl', u'Sat, 31 May 2014 16:03:32')]

然而,我们从this question得到,strptime与时区有一些问题。为了解决这个问题,我们使用^{}

^{pr2}$

注意,-0400是相对于GMT的EDT

要使用它对列表进行排序,请执行以下操作

^{3}$

我也有一个时区的问题,不得不删除它。

import datetime

content_dict = [(u'Bowe Bergdahl', [u'Sat, 31 May 2014 16:03:32']), (u"U.S. 'hypocrisy' in cybertheft charge", [u'Fri, 23 May 2014 02:30:44'])]

content2_dict =  sorted(content_dict, key=lambda x: datetime.datetime.strptime(x[1][0],'%a, %d %b %Y %H:%M:%S'))
print content2_dict

%b%H:%M:%S之间缺少{}。在

要访问content_dict中的时间字符串,应使用x[1][0]而不是{}。在

这里有一个解决方案,因为python(或datetime模块)在处理时区时遇到了一些问题(HKT可以解析,而EDT不能解析,这让我很困惑),并且假设所有时区都是相同的,我只是简单地将所有时区剥离掉。在

content2_dict = sorted(content_dict, key=lambda x: datetime.strptime(x[1][0][:-4], '%a, %d %b %Y %H:%M:%S'))

相关问题 更多 >