为什么不存储所有数据?

时间:2014-10-13 23:05:35

标签: python

我有一个携带密钥的字典:值但它只保存最后一次迭代并丢弃之前的条目,它被重置?这是迭代的ctr和字典长度的输出

Return the complete Term and DocID Ref.
LENGTH:6960
CTR:88699

我的代码:

class IndexData:

    def getTermDocIDCollection(self):
        ...............
            for term in terms:
    #TermDocIDCollection[term] = sourceFile['newid']
                TermDocIDCollection[term] = []
                 TermDocIDCollection[term].append(sourceFile['newid'])
        return TermDocIDCollection

1 个答案:

答案 0 :(得分:1)

您注释掉的代码片段执行以下操作:

  1. 为键设置一个值(删除之前存在的任何内容,如果它存在)
  2. 为键设置一个新值(空列表)
  3. 将步骤1中设置的值追加到新的空列表
  4. 可悲的是,它会在每次迭代时执行相同的操作,因此您最终会将[last value]分配给密钥。新代码(update)执行类似的操作。在过去,你会这样做:

    if term in TermDocIDCollection:
        TermDocIDCollection[term].append(sourceFile['newid'])
    else:
        TermDocIDCollection[term] = [sourceFile['newid']]
    

    或使用try - except的主题变体。添加collections后,您可以改为:

    from collections import defaultdict
    
    # ... code...
    
    TermDocIDCollection = defaultdict(list)
    

    你会像这样更新它:

    TermDocIDCollection[term].append(sourceFile['newid'])
    

    无需检查字典中是否存在term。如果没有,defaultdict类型将首先调用您传递的构造函数(list)来创建密钥的初始值