Iterating Through Python List Getting TypeError: 'NoneType' object is not iterable
Iterating Through Python List Getting TypeError: 'NoneType' object is not iterable
使用 nltk 根据输入的关键字列表生成同义词列表。
当 nltk 没有同义词时(即,当“None”被 returned 时),我得到“TypeError: 'NoneType' object is not 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
我要写什么 return 只是干净列表中的同义词?我更喜欢使用列表理解。
任何帮助表示赞赏。我是 python 菜鸟,找不到确切答案。
您可以删除 None
值并使用 itertools -
import itertools
list(itertools.chain(*[x for x in synonyms if x]))
执行此操作的 pythonic 方法:
result = []
for word in input_words:
synonyms = dictionary.synonym(word)
if synonyms:
result.extend(synonyms)
如果您坚持使用列表理解,您可以使用赋值表达式:
[synonym for word in input_words if (synonyms:=dictionary.synonym(words)) for synonym in synonyms]
但我认为第一个选项更可取。
尝试:
flat_list = []
for i in range(len(synonyms):
if isinstance(synonyms, list):
flat_list += i
这是一个更 pythonic 的衬里:
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']
使用 nltk 根据输入的关键字列表生成同义词列表。
当 nltk 没有同义词时(即,当“None”被 returned 时),我得到“TypeError: 'NoneType' object is not 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
我要写什么 return 只是干净列表中的同义词?我更喜欢使用列表理解。 任何帮助表示赞赏。我是 python 菜鸟,找不到确切答案。
您可以删除 None
值并使用 itertools -
import itertools
list(itertools.chain(*[x for x in synonyms if x]))
执行此操作的 pythonic 方法:
result = []
for word in input_words:
synonyms = dictionary.synonym(word)
if synonyms:
result.extend(synonyms)
如果您坚持使用列表理解,您可以使用赋值表达式:
[synonym for word in input_words if (synonyms:=dictionary.synonym(words)) for synonym in synonyms]
但我认为第一个选项更可取。
尝试:
flat_list = []
for i in range(len(synonyms):
if isinstance(synonyms, list):
flat_list += i
这是一个更 pythonic 的衬里:
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']