在Python列表中迭代获取类型错误:“NoneType”对象不可编辑

2024-05-19 06:22:31 发布

您现在位置:Python中文网/ 问答频道 /正文

使用nltk根据输入的关键字列表生成同义词列表

当nltk没有同义词时(即,当返回“None”时),我得到“TypeError:“NoneType”对象不可iterable”

from nltk.corpus import stopwords
from PyDictionary import PyDictionary
dictionary=PyDictionary()


inputWords = ['word1','word2','word3','word4','word5','word6','word7','word8']

synonyms = list(dictionary.synonym(i) for i in inputWords 

同义词的当前输出:

[['syn1','syn2','syn3'],['syn4'],None,['syn5'],None,['syn6','syn7'],None,['syn8'],None]]

同义词的所需输出:

['syn1','syn2','syn3','syn4','syn5','syn6','syn7','syn8']

我试过:

flat_list = [item for sublist in synonyms for item in sublist]

输出:

TypeError: 'NoneType' object is not iterable

我应该写些什么来返回干净列表中的同义词?我更喜欢使用列表理解。 谢谢你的帮助。我是个Python迷,找不到确切的答案


Tags: infromimportnone列表fordictionaryiterable
3条回答

尝试:

flat_list = []

for i in range(len(synonyms):
   if isinstance(synonyms, list):
      flat_list += i

下面是一个更具python风格的单行线:

flat_list = [i for sublist in synonyms if sublist is not None for i in sublist]
flat_list
>>>
['syn1', 'syn2', 'syn3', 'syn4', 'syn5', 'syn6', 'syn7', 'syn8']

您可以删除None值并使用itertools-

import itertools
list(itertools.chain(*[x for x in synonyms if x]))

相关问题 更多 >

    热门问题