2

目前我正在通过这个在线课程学习 Python 文本情感模块,讲师没有足够详细地解释这段代码是如何工作的。我尝试单独搜索每段代码以尝试拼凑他是如何做到的,但这对我来说毫无意义。

  1. 那么这段代码是如何工作的呢?为什么字典大括号中有一个 for 循环?

  2. then结尾x之前的逻辑是什么?for y in emotion_dict.values()for x in y

  3. emotion_dict=emotion_dict括号内的目的是什么?不就行了emotion_dict吗?

     def emotion_analyzer(text,emotion_dict=emotion_dict):
     #Set up the result dictionary
         emotions = {x for y in emotion_dict.values() for x in y}
         emotion_count = dict()
         for emotion in emotions:
             emotion_count[emotion] = 0
    
         #Analyze the text and normalize by total number of words
         total_words = len(text.split())
         for word in text.split():
              if emotion_dict.get(word):
                   for emotion in emotion_dict.get(word):
                       emotion_count[emotion] += 1/len(text.split())
         return emotion_count
    
4

1 回答 1

5

1 和 2

该行emotions = {x for y in emotion_dict.values() for x in y}使用集合理解。它构建了一个集合,而不是字典(尽管字典推导也存在并且看起来有些相似)。它是简写符号

emotions = set()  # Empty set
# Loop over all values (not keys) in the pre-existing dictionary emotion_dict
for y in emotion_dict.values():
    # The values y are some kind of container.
    # Loop over each element in these containers.
    for x in y:
        # Add x to the set
        emotions.add(x)

原始集合理解中的x右边{表示要存储在集合中的值。总之,emotions只是字典中所有容器内所有元素的集合(没有重复)emotion_dict。尝试打印emotion_dictemotion比较。

3

在函数定义中,

def emotion_analyzer(text, emotion_dict=emotion_dict):

emotion_dict=emotion_dict意味着如果您不将任何内容作为第二个参数传递,则具有名称的局部变量emotion_dict将设置为名称类似的全局变量。emotion_dict这是默认参数的示例。

于 2017-10-28T22:55:52.403 回答