'datetime.datetime'对象不可下标



我已经检查了关于这个的所有其他帖子,但没有一个可以解决我的问题。

我创建了一个包含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)。这意味着您最终会将ab卡在列表的末尾,而不仅仅是将元组添加到列表中。

有两个选项可以解决您的问题:

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

     last_encounters += [(d["id"], d["d_t"])]
    
  2. 或者最好使用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()]

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

相关内容

  • 没有找到相关文章

最新更新