Python 为什么不是';不是所有的数据都被存储了吗?
我有一个带有key:value的字典,但是它只保存最后一次迭代,并丢弃之前的条目,在哪里重置??这是迭代的ctr和字典长度的输出Python 为什么不是';不是所有的数据都被存储了吗?,python,Python,我有一个带有key:value的字典,但是它只保存最后一次迭代,并丢弃之前的条目,在哪里重置??这是迭代的ctr和字典长度的输出 Return the complete Term and DocID Ref. LENGTH:6960 CTR:88699 我的代码: class IndexData: def getTermDocIDCollection(self): ............... for term in terms: #
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
您注释掉的代码执行以下操作:
[last value]
分配给键。新代码(带有更新)也有类似的功能。在过去,你会这样做:
if term in TermDocIDCollection:
TermDocIDCollection[term].append(sourceFile['newid'])
else:
TermDocIDCollection[term] = [sourceFile['newid']]
或者使用try
-除了
之外的主题变体。添加集合后,您可以执行以下操作:
from collections import defaultdict
# ... code...
TermDocIDCollection = defaultdict(list)
您可以这样更新它:
TermDocIDCollection[term].append(sourceFile['newid'])
无需检查字典中是否存在术语
。如果没有,则defaultdict
类型将首先调用您传递的构造函数(list
)来创建密钥的初始值您的意思是文件可能多次包含每个密钥,并且字典仅保留每个密钥的最后一个条目吗?如果这就是你的意思,那就是它的工作原理dict.update
将添加新的键或替换现有的键。哦,这正是发生的事情,但正如你所看到的,我对列表中的部分进行了注释,它也在做同样的事情。我的目标是有步骤2和3(步骤1是另一个尝试)保留所有具有唯一值的重复术语我该怎么做?谢谢注意,我已经发布了两个解决这个问题的方法。一个是经典的(检查字典中是否存在该键:如果存在,则追加;如果它没有创建一个只包含第一个值的新列表),另一个是使用defaultdict
,如果您的新代码与您现在显示的代码类似,则不,您没有。每次都是盲目地设置TermDocIDCollection[term]=[]
。你需要明白,任何这样的作业都会用新的内容替换以前的内容。KSM:NP,这是经典。您可以找到大量有关StackOverflow的示例:-)总结一下:字典只是一个键值结构,经过优化可以有效地按键恢复信息。可以将相同的值关联到多个关键点,但每个关键点只能显示一次。但是,该值可以是任何值,这意味着您可以按自己喜欢的方式组织一个键的多个值(列表、字符串的重叠等等,取决于您的数据)