循环字典,但也在Python中更新它

循环字典,但也在Python中更新它,python,dictionary,recursion,iteration,Python,Dictionary,Recursion,Iteration,我最大的问题是我想循环我正在更改的字典,所以我的代码在大多数情况下都会生成一条错误消息,告诉我字典的大小在迭代过程中发生了更改。我希望你们能帮助我 好了,各位,我的问题更具体了,因为你们的要求太高了: 我的代码必须如何构造,以便我循环我的dic1,然后更新它,然后循环更新的dic1,并在此更新的dic上执行相同的操作 别忘了:没有糟糕的问题,只有糟糕的答案;-) 我最大的问题是我想循环我正在更改的字典,所以我的代码在大多数情况下都会生成一条错误消息,告诉我字典的大小在迭代过程中发生了更改 通常情

我最大的问题是我想循环我正在更改的字典,所以我的代码在大多数情况下都会生成一条错误消息,告诉我字典的大小在迭代过程中发生了更改。我希望你们能帮助我

好了,各位,我的问题更具体了,因为你们的要求太高了: 我的代码必须如何构造,以便我循环我的dic1,然后更新它,然后循环更新的dic1,并在此更新的dic上执行相同的操作

别忘了:没有糟糕的问题,只有糟糕的答案;-)

我最大的问题是我想循环我正在更改的字典,所以我的代码在大多数情况下都会生成一条错误消息,告诉我字典的大小在迭代过程中发生了更改

通常情况下,解决方法是循环查看正在更改的内容的副本,例如:

对于键,列表中的值(ing.items()):
list(ing.items())
将生成一个具有自己生命周期且不受影响的列表

del[key]

我不明白这个问题。步骤2不应在字典上的循环内执行。一旦找到值0,您就应该中断循环。发布您尝试的代码,我们将帮助您修复它。。这通常意味着,你需要的是与当地导师一起度过的时间,或是浏览教程,而不是堆栈溢出。最重要的是,每个教程将教你一系列相关的技术,而不仅仅是解决眼前的问题。如果你有失败的代码,请查看并编辑你的帖子;问题是我不知道如何正确地实现这段代码。正如我在文章中解释的那样,我计算出的算法来自我,这只是一个更大任务的一小部分,这只是一个单一的方法。我认为如果我把我的代码从我的上下文/类中取出,并将其作为一个一般的编码问题发布,对每个人来说都会更容易。此外,我还说明了我的代码最大的问题是什么。这并不是说我不知道如何实现它,我在实现的特定部分失败了(更新后通过我的dic循环)。请同时阅读我的标题。谢谢你的评论。但重要的是,我循环修改过的dic,因为我的_列表中元素的顺序很重要,所以2在4之前是很重要的。我知道它需要什么顺序,因为0表示我现在需要那个元素。正如我所说,这个算法是一个大类的一部分,这只是我对元素排序的方法。因此,如果有一个0,它意味着它是下一个被追加的元素,这会影响我接下来选择的元素。这会以什么方式扰乱顺序?特别是,为什么您觉得只对eing.items()中的key,value使用
顺序更好:
?不,您是对的,我在代码中尝试过之后现在理解了。谢谢,我已经能够为这个编写出我的代码了。这就是我一直在寻找的答案
def keysorting(self):
        eing = dict()  #my dic1
        tarnod = dict() #mydic2
        if self.has_cycle():
            raise Exception('There is a cycle!')
        else:
            for node in self.nodes():
                eing[node] = self.indeg(node)
            for node in self.nodes():
                tarnod[node] = self.target_nodes(node)

        for key, value in eing.items():
                if value == 0:
                    lst.append(key)
                    del eing[key]
                self.update(key, tarnod, eing)




   def update(self, key, tarnod, eing):
        if key in tarnod.keys():
            for val in tarnod[key]:
                eing[val] -= 1
            del eing[key]
            return eing