首页 > 解决方案 > 字典理解:TypeError:'builtin_function_or_method'对象不可迭代

问题描述

我有以下错误:

回溯(最后一次调用):
“CSV_dico.py”,第 65 行,in
= {k: [[elt.lower() for elt in v if elt.isalnum() if elt not in stopWords]for k,v in d_lemma.items]}
TypeError: 'builtin_function_or_method' 对象不可迭代

这是代码 - 我正在尝试删除停用词,从字典中的值和小写值中删除标点符号:

import nltk
from nltk import tokenize
from nltk.tokenize import sent_tokenize, word_tokenize
from nltk.corpus import stopwords

d_filtered_Words ={}                            
stopWords = set(stopwords.words('french'))
d_filtered_Words = {k: [[elt.lower() for elt in v if elt.isalnum() if elt not in stopWords]for k,v in d_lemma.items]}

print(d_filtered_Words)

输入

 {'4721': ['me', 'piquer', 'au', 'bureau', ',', 'cela', 'être', 'à', 'envisager', '(', 'avec', 'le', 'DMI1', ')', '.', 'ce', 'être', 'pas', 'quelque', 'chose', 'que', 'je', 'faire', 'car', 'je', 'ne', 'me', 'piquer', 'pas', 'dans', 'le', 'journée', 'mais', 'je', 'penser', 'que', 'ce', 'être', 'quelque', 'chose', 'qui', 'pouvoir', 'très', 'bien', 'se', 'transporter', 'dans', 'un', 'trousse', 'au', 'toilette', 'comme', 'un', 'femme', 'mettre', 'tout', 'son', 'nécessaire', 'hygiénique', 'dans', 'un', 'trousse', 'quand', 'elle', 'se', 'rendre', 'au', 'toilette', '.', 'ce', 'être', 'sympa', ',', 'ce', 'être', 'discret', '.'], '4722': ['"', 'ce', 'être', 'le', 'côté', 'discrétion', '.', 'autant', 'je', 'parler', 'très', 'facilement', 'de', 'mon', 'maladie', 'mais', 'le', 'côté', '"', '"', '"', '"', 'je', 'me', 'soigner', '"', '"', '"', '"', ',', 'je', 'aimer', 'bien', 'que', 'cela', 'rester', 'discret', '.', 'ce', 'être', 'pour', 'cela', 'que', 'je', 'aimer', 'bien', '.', '"'], '4723': ['mon', 'fille', ',', 'quand', 'elle', 'revenir', 'à', 'le', 'maison', 'ne', 'vouloir', 'pas', 'que', 'le', 'gens', 'autour', 'savoir', 'qu’elle', 'être', 'mal', 'en', 'point', '.', 'elle', 'ne', 'vouloir', 'pas', 'd’infirmier', '(', 'e', ')', 'pour', 'faire', 'son', 'piqûre', ',', 'que', 'le', 'gens', 'ne', 'savoir', 'pas', '.', 'elle', 'me', 'demander', 'de', 'lui', 'faire', 'le', 'piqûre', 'mais', 'je', 'n’aime', 'pas', 'voir', 'ce', 'aiguille', '.', 'avec', 'cela', ',', 'c’est', 'parfait', ',', 'je', 'n’ai', 'pas', 'l’impression', 'de', 'lui', 'faire', 'le', 'piqûre', '.', 'je', 'n’ai', 'même', 'pas', 'à', 'pincer', 'le', 'peau', ',', 'je', 'poser', 'sur', 'le', 'ventre', 'et', 'cela', 'se', 'faire', 'tout', 'seul', '.'], '5433': ['moins', 'cher', '...', '@card@', '%', 'de', 'moins', '...', "C'", 'être', 'quand', 'même', 'moins', 'qualitatif', 'que', 'un', 'seau', '!']}

标签: dictionarytagsnltkstop-wordsdictionary-comprehension

解决方案


您在这里有多个问题。

首先,你得到的错误:

>>> d = {'a':'1'}
>>> d.items
<built-in method items of dict object at ...>

注意d.items(不带括号)是一个函数,一个函数是不可迭代的:

>>> list(d.items)
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not iterable

但是d.items()(带括号)是一个dict_items对象:

>>> d.items()
dict_items([('a', '1')])

哪个是可迭代的(这意味着您可以调用iter它):

>>> list(d.items())
[('a', '1')]

其次,你的听写理解:

>>> {k: [[elt.lower() for elt in v if elt.isalnum() if elt not in stopWords]for k,v in d_lemma.items()]}
Traceback (most recent call last):
...
NameError: name 'k' is not defined

k从哪里来?这是一个键d_lemma.items()(注意方括号的位置):

>>> {k: [... for k,v in d_lemma.items()]}

是不正确的,因为k不存在于列表理解之外,而:

>>> {k: [...] for k,v in d_lemma.items()}

是正确的。

三、doubleif可以是aif ... and ...

>>> {k: [elt.lower() for elt in v if elt.isalnum() and elt not in stopWords] for k,v in d_lemma.items()}
{'4721': ['piquer', 'bureau', 'cela', 'être', 'envisager', 'dmi1', 'être', 'quelque', 'chose', 'faire', 'car', 'piquer', 'journée', 'penser', 'être', 'quelque', 'chose', 'pouvoir', 'très', 'bien', 'transporter', 'trousse', 'toilette', 'comme', 'femme', 'mettre', 'tout', 'nécessaire', 'hygiénique', 'trousse', 'quand', 'rendre', 'toilette', 'être', 'sympa', 'être', 'discret'], '4722': ['être', 'côté', 'discrétion', 'autant', 'parler', 'très', 'facilement', 'maladie', 'côté', 'soigner', 'aimer', 'bien', 'cela', 'rester', 'discret', 'être', 'cela', 'aimer', 'bien'], '4723': ['fille', 'quand', 'revenir', 'maison', 'vouloir', 'gens', 'autour', 'savoir', 'être', 'mal', 'point', 'vouloir', 'e', 'faire', 'piqûre', 'gens', 'savoir', 'demander', 'faire', 'piqûre', 'voir', 'aiguille', 'cela', 'parfait', 'faire', 'piqûre', 'pincer', 'peau', 'poser', 'ventre', 'cela', 'faire', 'tout', 'seul'], '5433': ['moins', 'cher', 'moins', 'être', 'quand', 'moins', 'qualitatif', 'seau']}

第四,坚持使用PEP8stopWords应该是stop_wordsd_filtered_Words应该是d_filtered_words(这真的很重要)。


推荐阅读