我需要在循环中从字典中删除ak/v对.在RuntimeError: dictionary changed size during iteration
我删除了k/v之后腌制字典后,在其中一个外循环中,我尝试重新打开新腌制/更新的字典.但是,正如你们许多人可能知道的那样 - 我得到了相同的错误 - 我认为当它到达循环的顶部时.我不在最外层的循环中使用我的字典.
所以我的问题是 - 有谁知道如何解决这个问题?我想从字典中删除ak/V对,并在循环的下一次迭代中使用该调整大小的字典.
关注问题并使用Cygil的解决方案
list=[27,29,23,30,3,5,40] testDict={} for x in range(25): tempDict={} tempDict['xsquared']=x*x tempDict['xinverse']=1.0/(x+1.0) testDict[(x,x+1)]=tempDict for item in list: print 'the Dictionary now has',len(testDict.keys()), ' keys' for key in testDict.keys(): if key[0]==item: del testDict[key]
我这样做是因为我必须让一些研究助理比较两个由于名称变体而无法匹配的数据集的观察结果.我们的想法是从一个数据集(比如集合A)中抛出一个名称,然后根据一个密钥匹配找到在另一个数据集(集合B)中附加到该密钥的所有名称.已确定一场比赛我不想再次显示B的价值,以加快他们的速度.因为有6000个观察结果我也不希望他们每次重新开始工作时都必须从A开始.但是,我可以通过让他们选择从他们使用的A输入最后一个密钥来解决这个问题.但是一旦确定了比赛,我真的需要减少B.
没有代码,我假设你写的是:
for key in dict: if check_condition(dict[key]): del dict[key]
如果是这样,你可以写
for key in list(dict.keys()): if key in dict and check_condition(dict[key]): del dict[key]
list(dict.keys())
返回键的副本,而不是视图,这使得可以从字典中删除(在这种情况下,您正在遍历键的副本,而不是字典本身中的键.)