【发布时间】:2021-08-14 10:33:33
【问题描述】:
返回一个字典,其键是单词,其值是双元素列表 [spam_count,non_spam_count],对应于我们在垃圾邮件和非垃圾邮件中看到的次数。我无法从下面的代码中理解以下内容。任何帮助都感激不尽!
这个声明是做什么的以及它背后的概念:counts[word][0 if is_spam else 1 ]+=1
from collections import defaultdict
def count_words(training_set):
"""TRAINING SET CONSISTS OF PAIRS (message,is_spam)"""
counts=defaultdict(lambda:[0,0])
for message,is_spam in training_set:
for word in tokenize(message):
counts[word][0 if is_spam else 1 ]+=1
return counts
x=[('rain is great','data'),('morning','data'),
('lazy','creditcard'),('enjoy','mumbai')]
count_words(x)
import re
def tokenize(message):
message=message.lower()
all_words=re.split("\W+",message)
return set(all_words)
【问题讨论】:
-
那是什么语言?
-
@SL5net 在 Python 中
-
x中元组的第二个元素应该是bool,不是吗?
-
@AntonyHatchkins is_spam 包含一个被认为是垃圾邮件的特定单词,例如单词“creditcard”是垃圾邮件,包含在我们必须检查是否为垃圾邮件的邮件中。
-
当你写
if is_spam你暗示is_spam是布尔值。如果它是一个字符串,它将始终评估为True,除非该字符串为空。
标签: python dictionary conditional-operator