'datetime.datetime'对象不可订阅

时间:2016-08-26 23:15:00

标签: python python-2.7 datetime tuples

我已经检查了所有其他帖子,但没有人可以解决我的问题。

我创建了一个列表,其中包含带有id和datetime对象的元组。每次我尝试清理列表: last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow] 我收到'datetime.datetime' object is not subscriptable的错误。它变得非常烦人,我尝试了dicts ......没有用。

还测试了项目[1],根据我的印刷品它是一个日期时间。

即使尝试将其更改为(x,y) for x,y in last_encounters if y < ...也无效。

一些有用的代码:

list = []
d_t = datetime.utcfromtimestamp(9000000)     
list += [('lel', d_t)]     
list = [item for item in list if item[1] < datetime.utcnow]

我希望有人能告诉我这里做错了什么。

提前致谢,

凯文

3 个答案:

答案 0 :(得分:1)

执行last_encounters += (a, b)时,您要将两个序列添加到一起,last_encounters(a,b)。这意味着您最终会将ab放在列表的末尾,而不是仅仅将元组添加到列表中。

有两种方法可以解决您的问题:

  1. 添加包含元组的序列:

     last_encounters += [(d["id"], d["d_t"])]
    
  2. 或者最好使用append方法:

     last_encounters.append((d["id"], d["d_t"]))
    

答案 1 :(得分:1)

看起来您的问题就是将元组添加到列表中的方式。以下是显示问题的示例:

l = []
l += ("a", "b")
print l

l = []
l.append( ("a", "b"))
print l  

给出了:

>>> ['a', 'b']
>>> [('a', 'b')]

所以list+=tuple相当于调用list.extend(tuple)而不是list.append(tuple),这就是你想要的。

关于所引发的例外含义的附注: X is not subscriptable表示您尝试在对象不支持时调用该语法X[some int]

答案 2 :(得分:0)

尝试将utcnow作为方法utcnow()调用:

last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow()]

我无法使用您的代码版本重现您的错误,但是列表中包含项目的版本会导致此修复。