这本字典中的 for 循环究竟是如何工作的?

How does this for-loop within this dictionary work exactly?

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

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

  2. for y in emotion_dict.values()之前x然后在最后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
    

1 和 2

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

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_dictlocal 变量类似地设置为 global 变量named emotion_dict,如果你不传递任何东西作为第二个参数。这是 default argument.

的示例