【问题标题】:Loop over dictionary but also update it in Python循环遍历字典,但也在 Python 中更新它
【发布时间】:2020-03-05 08:41:41
【问题描述】:
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

我最大的问题是我想循环遍历我正在更改的字典,因此我的代码大部分时间都会生成一条错误消息,告诉我字典的大小在迭代期间发生了变化。希望大家帮帮我

好的,伙计们,我的问题更加具体,因为您要求如此之高: 我的代码必须如何构造,以便我循环遍历我的 dic1,然后更新它,然后循环遍历更新的 dic1 并对这个更新的 dic 执行相同的操作

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

【问题讨论】:

  • 我不明白这个问题。第 2 步不应在字典的循环内完成。一旦找到值 0,就应该跳出循环。
  • 发布您尝试过的代码,我们会帮助您修复它。
  • "Can Someone Help Me?" is not a valid SO question。这通常表明您需要的是与当地导师相处或完成教程,而不是 Stack Overflow。最重要的是,每个教程都将教您一系列相关技术,而不仅仅是解决眼前的问题。如果您的代码失败,请参阅minimal, reproducible example 并编辑您的帖子;我们将从那里开始工作。
  • 问题是我不知道如何正确实现这段代码。正如我在帖子中解释的那样,我制定的算法来自我,这是一项更大任务的一小部分,这只是一个单一的方法。我认为,如果我从上下文/类中取出我的代码并将其作为一般编码问题发布,对每个人来说都会更容易。
  • 另外,我说明了我最大的代码问题是什么。这并不是说我不知道​​如何实现它,我在实现的特定部分失败(更新后循环通过我的 dic)。另请阅读我的标题。

标签: python dictionary recursion iteration


【解决方案1】:

我最大的问题是我想循环遍历我正在更改的字典,因此我的代码大部分时间都会生成一条错误消息,告诉我字典的大小在迭代期间发生了变化。

解决方案通常是循环遍历您正在更改的内容的副本,例如:

for key, value in list(eing.items()):

list(eing.items()) 将产生一个过自己的生活并且不会受到影响的列表

del eing[key]

【讨论】:

  • 感谢您的评论。但重要的是我循环更改的 dic,因为 my_list 中元素的顺序很重要,因此例如 2 在 4 之前很重要。而且我知道它需要什么顺序,因为 0 是我现在需要该元素的指示符。正如我所说,这个算法是一个大类的一部分,这只是我对元素排序的方法。因此,如果有一个 0,则意味着它接下来会被附加,这会影响我接下来选择的元素。
  • 这会以什么方式打乱订单?特别是为什么你觉得只用for key, value in eing.items(): 的顺序更好?
  • 不,你是对的,在我在我的代码中尝试过之后我现在明白了。谢谢,我能够为此编写代码。这就是我一直在寻找的答案
猜你喜欢
  • 2023-03-12
  • 2022-09-22
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2023-04-03
  • 2019-04-24
  • 2020-11-10
相关资源
最近更新 更多