这本字典中的 for 循环究竟是如何工作的?
How does this for-loop within this dictionary work exactly?
目前我正在通过此在线课程学习 Python 文本情感模块,讲师未能足够详细地解释这段代码的工作原理。我试着单独搜索每段代码,试图拼凑出他是如何做到的,但这对我来说毫无意义。
那么这段代码是如何工作的呢?为什么字典大括号内有一个 for 循环?
在for y in emotion_dict.values()
之前x
然后在最后for x in y
背后的逻辑是什么?
括号内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_dict
和 emotion
并进行比较。
3
在函数定义中,
def emotion_analyzer(text, emotion_dict=emotion_dict):
emotion_dict=emotion_dict
意味着名称为 emotion_dict
的 local 变量类似地设置为 global 变量named emotion_dict
,如果你不传递任何东西作为第二个参数。这是 default argument.
的示例
目前我正在通过此在线课程学习 Python 文本情感模块,讲师未能足够详细地解释这段代码的工作原理。我试着单独搜索每段代码,试图拼凑出他是如何做到的,但这对我来说毫无意义。
那么这段代码是如何工作的呢?为什么字典大括号内有一个 for 循环?
在
for y in emotion_dict.values()
之前x
然后在最后for x in y
背后的逻辑是什么?括号内
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_dict
和 emotion
并进行比较。
3
在函数定义中,
def emotion_analyzer(text, emotion_dict=emotion_dict):
emotion_dict=emotion_dict
意味着名称为 emotion_dict
的 local 变量类似地设置为 global 变量named emotion_dict
,如果你不传递任何东西作为第二个参数。这是 default argument.