字典理解:TypeError:'builtin_function_or_method'对象不可迭代

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典理解:TypeError:'builtin_function_or_method'对象不可迭代相关的知识,希望对你有一定的参考价值。

我有以下错误:

Traceback(最近一次调用最后一次): “CSV_dico.py”,第65行,in = {k:[elt.lower()表示elt in v if elt.isalnum()如果elt不在stopWords中]表示k,v表示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', '!']}
答案

你这里有多个问题。

首先,你得到的错误:

>>> 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()]}

是不正确的,因为qazxsw poi不符合列表理解,而:

k

是正确的。

第三,双>>> {k: [...] for k,v in d_lemma.items()} 可以是if

if ... 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']} PEP8应该是stopWordsstop_words应该是d_filtered_Words(这非常重要)。

以上是关于字典理解:TypeError:'builtin_function_or_method'对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.11.17 TypeError:'上下文必须是字典而不是上下文',除了它是字典

python3错误之TypeError: 'dict_items' object is not callable

在调用列表中的字典中的值时收到“TypeError:列表索引必须是整数或切片,而不是字典”

2. python提示:TypeError: unhashable type: 'list'

RF之TypeError: Object of type 'bytes' is not JSON serializable

Python: TypeError: 'dict' object is not callable