0

我需要向 WSHandler 连接列表(Tornado、Python)添加更多值。我正在将连接添加到这样的列表中 self.connections.append(self),但我需要添加更多信息,例如self.connections.append({'id': self, 'keyword' : ''})(稍后找到当前selfid 并替换关键字。)

当我尝试基于self对象(如self.connections[self].filter = 'keyword')添加到列表时,我得到TypeError: list indices must be integers, not WSHandler.

那么我该怎么做呢?

编辑:设法找到正确的对象,如下所示:

def on_message(self, message):
    print message
    for x in self.connections:
        if x['id'] == self:
            print 'found something'
            x['keyword'] = message
            print x['keyword']
            print x

现在,如何从 dict 中删除整个 dict connectionsself.connections.remove(self)不再工作,当然。

4

2 回答 2

3

对于此用例,您不需要连接列表。将它存储在对象本身中可能更容易。只需使用self.filter = 'keyword'.

除此以外:

for dict in self.connections:
    if dict['id'] == self:
        dict['keyword'] = 'updated'

或者,如果您喜欢简洁而不是清晰:

for dict in [dict for dict in self.connections if dict['id'] == self]:
    dict['keyword'] == 'updated'

要删除,请使用:

for dict in self.connections:
    if dict['id'] == self:
        self.connections.remove(dict)
于 2012-10-02T11:52:19.617 回答
1

由于self.connections是一个列表,因此您只能使用整数对其进行索引(如错误所述)。 self这是一个 WSHandler 对象,而不是整数。

我不是 Tornado 方面的专家,所以你应该试试 Hans 所说的。

如果您仍然需要按照您提到的方式进行操作,请尝试:self.connections[self.connections.index(self)]在列表中定位 self 对象。

于 2012-10-02T11:54:28.200 回答