我已经检查了关于这个的所有其他帖子,但没有一个可以解决我的问题。
我创建了一个包含id和datetime对象的元组的列表。每次我试图清理列表:last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow]
我得到'datetime.datetime' object is not subscriptable
的误差。越来越烦了,我试过用字典…没有工作。
也测试了项目[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]
我希望有人能告诉我我在这里做错了什么。
提前感谢,
凯文当您执行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"]))
看起来您的问题是您将元组添加到列表的方式。下面是一个例子来说明这个问题:
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]
,而对象不支持它。尝试调用utcnow
作为方法utcnow()
:
last_encounters = [item for item in last_encounters if item[1] < datetime.utcnow()]
我无法用您的代码版本重现您的错误,但是包含列表中项目的版本导致此修复。