如何绕过“字典在迭代过程中更改大小”

时间:2019-01-12 02:11:07

标签: python dictionary heuristics

我正在为一个可由表(元组的元组)表示的问题写一个启发式函数,我从表中的一些随机单元格开始,给出一个0值,然后对其加1邻居等等-这个值稍后可以在字典中显示-其中键是单元格的坐标,而值是其值。每次进入新单元格时,我都会将其保存到dic中。

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

    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

我希望它实际改变大小并在迭代过程中继续。有什么办法吗?

1 个答案:

答案 0 :(得分: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))
    ...