Как работает этот цикл for в этом словаре?
В настоящее время я изучаю модуль текстовых настроений Python через этот онлайн-курс, и лектор не смог объяснить достаточно подробно, как работает этот фрагмент кода. Я пытался искать каждый фрагмент кода по отдельности, чтобы попытаться собрать воедино то, как он это сделал, но для меня это не имеет смысла.
Так как же работает этот код? Почему в скобках словаря есть цикл for?
В чем логика
x
передfor y in emotion_dict.values()
затем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 ответ
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_dict
а также emotion
и сравни.
3
В определении функции
def emotion_analyzer(text, emotion_dict=emotion_dict):
emotion_dict=emotion_dict
означает, что локальная переменная с именем emotion_dict
устанавливается в глобальную переменную с аналогичным именем emotion_dict
, если вы не передаете ничего в качестве второго аргумента. Это пример аргумента по умолчанию.