Python for循环无法区分操作:为每条评论填充wordDict
解决评论词汇统计的问题
嘿,我来帮你排查下这个问题~
你的代码逻辑本身没毛病,但大概率是踩了Python可变对象引用共享的坑——也就是说,你可能给所有prova子项的prova[i][1]都赋值了同一个wordDict字典对象。这样一来,每次循环修改的都是同一个字典,最后所有评论的统计结果会混在一起,自然达不到“每条评论单独统计词汇”的预期。
解决方案步骤
1. 为每条评论创建独立的统计字典
首先要确保每条评论都有自己专属的空统计字典,而不是共用同一个。假设你的基础词汇字典是base_word_dict = {'sky':0, 'blue':0,'water':0,...},在初始化prova的每个子项时,要为prova[i][1]创建一个副本:
# 遍历prova,为每条评论生成独立的统计字典 for comment_item in prova: # 方法1:用字典推导式创建新字典 comment_item[1] = {word: 0 for word in base_word_dict} # 方法2:用copy方法(和上面效果一致) # comment_item[1] = base_word_dict.copy()
2. 执行词汇统计(优化版)
这时候再运行你的统计逻辑,或者可以把代码写得更清晰易读,同时避免评论中出现未收录词汇导致的KeyError:
for comment_item in prova: # 取出当前评论的统计字典和词汇列表 word_counter = comment_item[1] comment_words = comment_item[4] for word in comment_words: # 只统计基础字典里有的词汇,防止报错 if word in word_counter: word_counter[word] += 1
补充说明
如果你的评论里可能出现不在base_word_dict中的词汇,且希望统计这些词,可以去掉if判断,或者提前把这些新词加入统计字典。但如果不需要统计未知词,保留判断能避免程序崩溃。
内容的提问来源于stack exchange,提问作者Wiria
相关产品推荐
相关产品推荐

