我需要在循环中从字典中删除k / v对。获得RuntimeError: dictionary changed size during iteration
后,我在删除k / v后腌制字典,在其中一个外循环中,我尝试重新打开新腌制/更新的字典。但是,正如你们许多人可能知道的那样 - 我得到了相同的错误 - 我认为当它到达循环的顶部时。我不在最外层的循环中使用我的字典。
所以我的问题是 - 有谁知道如何解决这个问题?我想从字典中删除一个k / 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
答案 0 :(得分:6)
没有代码,我假设你写的是:
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())
返回键的副本,而不是视图,这使得可以从字典中删除(在这种情况下,您正在遍历键的副本,而不是字典本身中的键) 。)
答案 1 :(得分:4)
删除值为>的所有键。 15:
for k in mydict.keys(): # makes a list of the keys and iterate
# over the list, not over the dict.
if mydict[k] > 15:
del mydict[k]
答案 2 :(得分:1)
变化:
for ansSeries in notmatched:
要:
for ansSeries in notmatched.copy():