我正在创建棋盘的字典表示,其中键是表示位置的坐标对,值是表示片段类型的字符串。例如:
playerPieces = { (0,0):'R', (1,0):'S', (2,0):'B', (3,0):'Q' ... }
这两个球员都有一个这样的字典。我的问题在于尝试迭代所有玩家的作品。我尝试了三种不同的方法,但似乎都没有。
如果我尝试将字典解压缩为键,值对,如下:
for position, piece in playerPieces:
相反,position
和piece
分别解包密钥对的第一个和第二个元素(因此,对于playerPieces
的第一次迭代,我会得到position == 0
和{{ 1}}。不是很有帮助。
如果我尝试以下方法:
piece == 0
我收到错误for (col, row), piece in playerPieces:
,我目前无法理解。
最后,如果我摆脱了列周围的括号,行对就像这样:
TypeError: 'int' object is not iterable
我当然得到错误for col, row, piece in playerPieces:
。
那么,还有什么其他选择?可以这样做吗?第二个选项对我来说似乎是最可能的选择,所以我认为理解TypeError是解决问题的关键所在,但我有点不知所措。
答案 0 :(得分:3)
默认情况下,Python会迭代字典中的键值,这就是for position, piece in playerPieces:
简单地从每个键中删除两个值以及混淆的主要来源的原因。
考虑到这一点,只需遍历键,然后访问每个元素。使用类似下面的示例将完成您要做的事情。
for position in playerPieces:
piece = playerPieces[position]
答案 1 :(得分:2)
你需要遍历字典的项目:
for (col, row), piece in d.items():
print(col, row, piece)
迭代dict
只会迭代其键。
答案 2 :(得分:-1)
使用iteritems:
playerPieces = { (0,0):'R', (1,0):'S', (2,0):'B', (3,0):'Q'}
for position, piece in playerPieces.iteritems():
print position, piece
输出:
(3, 0) Q
(2, 0) B
(1, 0) S
(0, 0) R