我有一个字典,字符串作为键,列表的坐标为点值。
即
dict = {'.' : [[0,0],[0,1]...], 'X': [[0,2], [8,1]...] }
其中'X'和'。'键不包含相同的坐标。
我的问题是迭代它们并在值的位置打印键。我尝试了嵌套的for循环,但我不知道如何访问输出终端上的坐标。
我想将输出打印到控制台而不是绘制它。
我希望我的输出看起来类似于:
..................X....
XX...........X.........
XXX....................
XXX....X...X...X..X....
.......................
.......................
.......................
我正在使用python 3
答案 0 :(得分:1)
所以如果你有一个代表你的董事会的二维名单
board = [[' ' for _ in range(9)] for _ in range(9)]
您可以使用pprint
显示
import pprint
pprint.pprint(board)
[[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']]
因此,要执行替换,您可以遍历字典并根据需要替换这些元素
d = {'.' : [[0,0],[0,1]], 'X': [[0,2], [8,1]] }
for k, v in d.items():
for i, j in v:
board[i][j] = k
结果是
>>> pprint.pprint(board)
[['.', '.', 'X', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '],
[' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ']]
答案 1 :(得分:0)
另一种方式是首先"反转"字典,然后循环你的坐标,并在倒置字典中查找它们。
类似的东西:
#d1 = {'.' : [[0,0],[0,1]...], 'X': [[0,2], [8,1]...] }
d1 = {'.' : [[0,0],[0,1]], 'X': [[0,2], [8,1]] }
# "Invert" the dictionary
d2 = {}
for (symbol, coords) in d1.items():
for coord in coords:
d2[tuple(coord)] = symbol # Note 1
# Display it (assuming your coordinates go from 0-9 inclusive
for y in range(10):
for x in range(10):
sym = d2.get((x,y), ' ') # Note 2
print(sym, end='') # Note 2
# Print a newline at the end of each row
print()
注1:这里,coord
是一个2元素列表,但由于列表不能用作字典键,我将它们转换为元组。
注意2:这是必要的,因为示例代码具有不完整的d1
字典。如果您的d1
字典中包含所有对,则可以将这两行合并为
print(d2[(x,y)], end='')
注3:我们在这里为print
函数指定一个可选参数,告诉它不在打印后添加换行符。
输出看起来有点奇怪:
.
. X
X
(使用额外的仅限空格的行)但仅因为我的d1
字典不完整。
最后,你可能会仔细研究所有这些,并注意到你的电路板似乎已关闭,就像模式指向正确时一样。如果是这种情况,你的坐标是(y,x)顺序,我假设它们是(x,y)顺序。只需更改行
即可d2.get((x,y), ' ')
到
d2.get((y,x), ' ')
或者,如果您在注2中进行了简化,请更改
print(d2[(x,y)], end='')
到
print(d2[(y,x)], end='')
答案 2 :(得分:0)
首先初始化一个装有圆点的空白板,这可以通过以下方式完成:
board = [['.' for _ in range(8)] for _ in range(8)]
给出输出:
[['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '.', '.', '.']]
然而,这不是一种简洁的印刷方式,因此在进一步开发之前,我们可以创建一种打印方式。
这可以通过循环遍历rows
以及加入该列表的每个row
来创建字符串并按照以下方式打印:
for r in board:
print(''.join(r))
这个小小的for循环整齐地打印当前的电路板:
........
........
........
........
........
........
........
........
用dict
中指定的十字架替换点,我们可以简单地做(假设坐标的形式为[x, y]
):
d = {'.' : [[0,0],[0,1]], 'X': [[0,2], [4,1], [2,5]] }
for c in d['X']:
board[c[1]][c[0]] = 'X'
然后我们可以像以前一样显示电路板,然后我们得到:
........
....X...
X.......
........
........
..X.....
........
........
希望这会有所帮助:)
答案 3 :(得分:0)
除非你有特殊的理由这样做,否则我只是将坐标存储为关键而不是值。当然,您不能将列表用作键,因此您必须使用元组。
board = {(x, y): '.' for x in range(10) for y in range(10)}
board[(2, 3)] = 'X'
for y in range(10):
for x in range(10):
print(board[(x, y)], end=' ')
print()
输出:
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . X . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .