如何绕过"迭代过程中字典更改大小"



我正在为一个可以由表(元组元组)呈现的问题编写一个启发式函数,我从表中的一些随机单元格开始,我给出一个 0 值,然后将 1 添加到其邻居中,依此类推 - 这个值稍后可以在字典中显示 - 其中键是单元格的坐标,值是它的值。 每次我进入一个新单元格时, 我把它保存到我的迪克。

问题 - 对于我制作的这种 BFS 式方法,我需要某种动态大小的字典。当我开始迭代时,有一些初始键,然后在代码运行时添加更多键 - 代码也需要检查这些新单元格。虽然我认为python能够处理这个问题,但我得到了一个运行时错误,上面写着"运行时错误:字典在迭代过程中更改了大小"

    visitedCells = dict()
    for row in range(len(node.state)):
        for cell in range(len(node.state[0])):
            if STATEMENT:
                visitedCells[row, cell] = 0
    for cell, val in visitedCells.items():
        row = cell[0]
        col = cell[1]
        if STATEMENT:
            visitedCells[row + 1, col] = val + 1
        if STATEMENT:
            visitedCells[row - 1, col] = val + 1
        if STATEMENT:
            visitedCells[row, col + 1] = val + 1
        if STATEMENT:
            visitedCells[row, col - 1] = val + 1

我希望它实际上会改变大小并在迭代期间继续。有什么办法可以做到这一点吗?

您可以维护一个队列供要访问的单元格和一个单独的字典来指示每个单元格的状态:

queue = list(visitedCells.items())
while queue:
    row, col = queue.pop(0)
    if STATEMENT:
        visitedCells[row + 1, col] = val + 1
        queue.append((row + 1, col))
    ...

最新更新