修改python中的字典值(得到奇怪的结果)

时间:2014-07-08 18:10:41

标签: python list dictionary

for index,line in enumerate(status):
   for word in line:
      if word not in score_dict:
        non_sentiment_dictionary[word].extend([original_sentiment[index]])  

以上是我的代码..一些背景信息..状态是嵌套列表。它有几个句子,我已经将每个句子中的单词分开,这样每个句子本身就是一个列表。

例如,status = [['我',' Love','你' ],['你''',#39; awesome']

score_dict和non_sentiment_dictionary是字典。例如 score_dict = {' love':5,' awesome':3}

non_sentiment_dictionary的原始字典值为空。

并且,有original_sentiment列表,它只是简单的整数数组。为了简单起见, 让我们说它是满是零的列表。

我想要做的是每个状态行中的每个单词,如果该单词未包含在score_dict中,则使用该单词键修改字典值。在这种情况下,请扩展列表。

例如,如果单词'是'不在score_dict中,我们扩展名单non_sentiment_dictionary ['是']。

问题在于,由于某些原因,我不理解non_sentiment_dictionary的增长非常快,因为每次扩展列表时,它似乎都会获得前一个循环的全部值。

这是我放置一些打印语句以了解正在发生的事情之后的结果。

让我们说'天空'已经[0,0,0,0]了。当我们看到“上帝”这个词时,这是第一次在循环中, 我们应该得到[0]。

但是,我得到了以下[0,0,0,0]。它似乎复制了我之前访问过的字典值,即使non_sentiment_dictionary的原始字典值为空。

sky
[0, 0, 0, 0]
god
[0, 0, 0, 0, 0] 

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

Extend获取一个列表并向其添加另一个列表 - 您希望将值附加到可能尚不存在的简单列表中:

non_sentiment_dictionary.setdefault(word, []).append([original_sentiment[index]])