微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

遍历 Python 列表获取 TypeError:'NoneType' 对象不可迭代

如何解决遍历 Python 列表获取 TypeError:'NoneType' 对象不可迭代

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

当 nltk 没有同义词时(即返回“None”时),我收到“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'],['syn6','syn7'],['syn8'],None]]

同义词所需的输出

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

我试过了:

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

输出

TypeError: 'nonetype' object is not iterable

我该怎么写才能只返回干净列表中的同义词?我更喜欢使用列表理解。 任何帮助表示赞赏。我是一个 python 菜鸟,找不到确切的答案。

解决方法

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

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

试试:

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']

,

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]

但我认为第一个选项更可取。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?