我需要在循环中从字典中删除一个 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 的值来加快他们的速度。因为有 6,000 个观察结果,我也不希望他们每次恢复工作时都必须从 A 的开头开始。但是,我可以通过让他们选择输入他们使用的 A 的最后一个 key 来解决这个问题。但是一旦匹配被确定,我真的需要减少 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())
返回键的副本,而不是 View ,这使得从字典中删除成为可能(您正在遍历键的副本,而不是字典本身的键,在这种情况下。)
关于python - 如何解决需要更新字典的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/712225/