首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的Lambda参数函数

python中的Lambda参数函数
EN

Stack Overflow用户
提问于 2014-11-29 22:01:31
回答 1查看 742关注 0票数 1

我应该使用Python3.4的NLTK (情感分析)来分析莎士比亚的文本。但是我得到了这个错误信息:

代码语言:javascript
复制
**Traceback (most recent call last):
  File "C:\Users\HAMIMOUNE\AppData\Roaming\nltk_data\shakespeare.py", line 8, in <module>
    [ line.split('\t') for line in open("AFINN-96.txt") ]))
TypeError: <lambda>() missing 1 required positional argument: 'v'**

下面是我的代码:

代码语言:javascript
复制
from nltk.corpus import shakespeare
from collections import defaultdict
import json
hamlet = shakespeare.xml('hamlet.xml')
speeches = hamlet.findall('.//SPEECH')
prevSpeaker =  speeches[0].find('SPEAKER').text
afinn = dict(map(lambda k,v: (k,int(v)), 
                [ line.split('\t') for line in open("AFINN-96.txt") ])) 

dict = defaultdict(lambda: defaultdict(lambda: 0))
for speech in speeches:
    speaker = speech.find('SPEAKER').text
    lines = "\n".join(line.text for line in speech.findall('LINE') if line.text is not None)
    sentiment = sum(map(lambda word: afinn.get(word, 0), lines.lower().split()))
    dict[speaker][prevSpeaker] += sentiment
    prevSpeaker = speaker
print(json.dumps(dict, sort_keys=True, indent=4))
EN

回答 1

Stack Overflow用户

发布于 2014-11-29 22:07:35

map使用一个参数(在本例中是一个字符串列表)调用函数。您需要调整lambda以获取一个参数:

代码语言:javascript
复制
afinn = dict(map(lambda item: (item[0], int(item[1])), 
                 [ line.split('\t') for line in open("AFINN-96.txt") ])) 

另一种使用dict-comprehension的方法:

代码语言:javascript
复制
afinn = {k: int(v) for k, v in
         [line.split('\t') for line in open("AFINN-96.txt")]}

顺便说一句,不要使用dict作为变量名。覆盖它可以防止您使用内置函数/类型dict

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

https://stackoverflow.com/questions/27203090

复制
相关文章

相似问题

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