如何从字典中生成网格?

2024-10-01 13:45:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这个网站上搜索了其他关于如何做到这一点的问题,但是我没有找到任何足够接近的问题来解决它。我读过关于字典的python文档,但仍然感到困惑。我知道这是基本的,但我还没弄明白。在

我有一本字典,里面有(x,y)元组作为键,我想用这本字典做一个网格。我希望网格中的每个(x,y)坐标都用“.”表示,这样我最终就有了一个点的网格,以后我可以编辑成其他符号。在

这就是我所尝试的:

def createEmptyGrid(grid_dimensions):
    grid = {}
    for x in range(grid_dimensions):
        for y in range(grid_dimensions):
            grid[x,y] = '.'
    return grid

def initial_grid(cell_dimensions, density, disease):
    grid = createEmptyGrid(cell_dimensions)
    for cell in grid:
        print grid[cell]


print initial_grid(3, 0, 0)

我的输出是:

^{pr2}$

我明白为什么它给我这个输出,因为我告诉它只打印字典中的每个值,但我不知道如何修改它做我想做的。在

我的预期产出是:

 . . .
 . . .
 . . .

谢谢任何帮助,谢谢


Tags: in文档网格for字典网站defcell
3条回答

我认为你应该用2D列表代替dict。也许:

def createEmptyGrid(grid_dimensions):
    grid = [None] * grid_dimensions
    for x in range(grid_dimensions):
        grid[x] = ['.'] * grid_dimensions
    return grid

def initial_grid(cell_dimensions, density, disease):
    grid = createEmptyGrid(cell_dimensions)
    for cell in grid:
        print ' '.join(cell)

initial_grid(3, 0, 0)

可运行代码:https://ideone.com/94P6ZM

for cell in grid:
    print grid[cell]

这表示“对于网格中的每个单元格,将它的值打印到一个新行上”。最后一个None来自这一行

^{pr2}$

由于函数initial_grid没有返回值,因此它正在打印None。在

python dict不是一种非常有效的以网格形式存储值的方法,但是如果您想打印它,请尝试以下方法:

def createEmptyGrid(grid_dimensions):
    grid = {}
    for x in range(grid_dimensions):
        for y in range(grid_dimensions):
            grid[x,y] = '.'
    return grid

def initial_grid(cell_dimensions, density, disease):
    grid = createEmptyGrid(cell_dimensions)
    return grid

def print_grid(grid, cell_dimensions):
    for y in range(cell_dimensions):
        for x in range(cell_dimensions):
            print grid[x,y], # note the comma
        print '' # start a new line after each row


grid = initial_grid(3, 0, 0)
print_grid(grid, 3)

打印时需要使用网格的尺寸,以便一次打印一行:

def createEmptyGrid(grid_dimensions):
    grid = {}
    for x in range(grid_dimensions):
        for y in range(grid_dimensions):
            grid[x,y] = '.'
    return grid

def initial_grid(cell_dimensions, density, disease):
    grid = createEmptyGrid(cell_dimensions)
    for y in range(cell_dimensions):
        print(' '.join(grid[x, y] for x in range(cell_dimensions)))

# Don't need to print this call as the function already
# prints
initial_grid(3, 0, 0)

这意味着您需要在其他函数中使用网格时跟踪维度。你每次都想把字典扫描一下 重建维度, 看起来像这样:

^{pr2}$

但这将是一个有点麻烦的解决办法。在

相关问题 更多 >