我已经检查了所有其他帖子,但没有人可以解决我的问题。
我创建了一个列表,其中包含带有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]
我希望有人能告诉我这里做错了什么。
提前致谢,
凯文
答案 0 :(得分:1)
执行last_encounters += (a, b)
时,您要将两个序列添加到一起,last_encounters
和(a,b)
。这意味着您最终会将a
和b
放在列表的末尾,而不是仅仅将元组添加到列表中。
有两种方法可以解决您的问题:
添加包含元组的序列:
last_encounters += [(d["id"], d["d_t"])]
或者最好使用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()]
我无法使用您的代码版本重现您的错误,但是列表中包含项目的版本会导致此修复。