python - python中的Lambda参数函数

标签 python dictionary lambda nltk

我应该使用 python 3.4 使用 NLTK(情感分析)来分析莎士比亚文本。但我收到此错误消息:

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

这是我的代码:

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))

最佳答案

map使用参数(在本例中为字符串列表)调用该函数。您需要调整 lambda 来获取参数:

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

使用字典理解的替代方法:

afinn = {k: int(v) for k, v in
         [line.split('\t') for line in open("AFINN-96.txt")]}

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

关于python - python中的Lambda参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27203090/

相关文章:

python - 为什么不能将 *args 从覆盖 int 的类传递给 super().__init__()?

python - 如何在 Python 中重置 TCP 套接字?

python - 如何使我修改后的 pandas/numpy .where 函数适应不同大小的列表参数?

c++ - 检查可调用模板参数类型

c++ - 有没有更好的方法在 C++ 中实现类似 Java 的本地类?

从文本文件读取时的 Python 编码问题

python-3.x - Hackerrank Python3 哈希表 : Ransom Note and dictionary comprehension

C++ map 比较器

c - 将一个 Char* 映射到两个整数

python - 'lambda' 关键字的更短替代方案?