English 中文(简体)
如何解决需要更新字典的问题
原标题:
  • 时间:2009-04-03 01:14:28
  •  标签:

我需要在循环中从字典中删除一个k/v对。在得到RuntimeError:dictionary在迭代过程中改变了大小之后,我在删除k/v后对字典进行了pickle,并在其中一个外循环中尝试重新打开新pickle/更新的字典。然而,正如你们中的许多人可能知道的那样,我会得到同样的错误——我想当它到达循环的顶部时。我没有把字典用在最外层。

所以我的问题是,有人知道如何解决这个问题吗?我想从字典中删除一个k/V对,并在循环的下一次迭代中使用调整大小的字典。

关注问题并使用赛吉尔的解决方案

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]

<code>list(dict.keys())</code>返回键的副本,而不是视图,这使得可以从字典中删除(在这种情况下,您正在遍历键的副本而不是字典本身中的键)

问题回答

删除值为>;的所有键;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]

更改:

for ansSeries in notmatched:

收件人:

for ansSeries in notmatched.copy():




相关问题
热门标签