首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字典理解: TypeError:'builtin_function_or_method‘对象不可迭代

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

Stack Overflow用户
提问于 2019-04-24 15:21:05
回答 1查看 475关注 0票数 0

我有以下错误:

回溯(最近一次调用): "CSV_dico.py",第65行,在 = { k:[elt.lower()表示elt in v if elt.isalnum()如果elt不在stopWordsfor k中,v在d_lemma.items中]} TypeError:'builtin_function_or_method‘对象不可迭代

这就是代码--我试图在字典中删除断点、从值中删除标点符号和小写值:

代码语言:javascript
复制
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)

输入

代码语言:javascript
复制
 {'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', '!']}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-26 19:12:43

你在这里有很多问题。

首先,您得到的错误:

代码语言:javascript
复制
>>> d = {'a':'1'}
>>> d.items
<built-in method items of dict object at ...>

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

代码语言:javascript
复制
>>> list(d.items)
Traceback (most recent call last):
...
TypeError: 'builtin_function_or_method' object is not iterable

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

代码语言:javascript
复制
>>> d.items()
dict_items([('a', '1')])

它是可迭代的(这意味着您可以在上面调用iter ):

代码语言:javascript
复制
>>> list(d.items())
[('a', '1')]

第二,你的理解:

代码语言:javascript
复制
>>> {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()的一个键(注意方括号的位置):

代码语言:javascript
复制
>>> {k: [... for k,v in d_lemma.items()]}

是不一致的,因为k并没有超出列表的理解范围,而:

代码语言:javascript
复制
>>> {k: [...] for k,v in d_lemma.items()}

是对的。

第三,双if可以是if ... and ...

代码语言:javascript
复制
>>> {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 (这是非常重要的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55833527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档