TypeError:'zip'对象不可订阅

时间:2014-12-11 20:01:23

标签: python python-3.x

我有一个标记文件,格式为token / tag,我尝试了一个函数,它返回一个包含来自(word,tag)列表的单词的元组。

def text_from_tagged_ngram(ngram): 
    if type(ngram) == tuple:
        return ngram[0]
    return " ".join(zip(*ngram)[0]) # zip(*ngram)[0] returns a tuple with words from a (word,tag) list

在python 2.7中它运行良好,但是在python 3.4中它给出了以下错误:

return " ".join(list[zip(*ngram)[0]])
TypeError: 'zip' object is not subscriptable

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:86)

在Python 2中,zip返回了一个列表。在Python 3中,zip返回一个可迭代对象。但是你可以通过调用list将它变成一个列表。

那将是:

list(zip(*ngram))

这是一个列表,就像在Python 2中一样,所以你可以使用:

list(zip(*ngram))[0]

等。

但是如果你只需要第一个元素,那么你并不需要一个列表。您可以使用next

那将是:

next(zip(*ngram))