如何遍历字典中的键是成对的?

时间:2017-03-17 14:45:20

标签: python dictionary iteration

我正在创建棋盘的字典表示,其中键是表示位置的坐标对,值是表示片段类型的字符串。例如:

playerPieces = { (0,0):'R', (1,0):'S', (2,0):'B', (3,0):'Q' ... }

这两个球员都有一个这样的字典。我的问题在于尝试迭代所有玩家的作品。我尝试了三种不同的方法,但似乎都没有。

  1. 如果我尝试将字典解压缩为键,值对,如下:

    for position, piece in playerPieces:

  2. 相反,positionpiece分别解包密钥对的第一个和第二个元素(因此,对于playerPieces的第一次迭代,我会得到position == 0和{{ 1}}。不是很有帮助。

    1. 如果我尝试以下方法:

      piece == 0

    2. 我收到错误for (col, row), piece in playerPieces:,我目前无法理解。

      1. 最后,如果我摆脱了列周围的括号,行对就像这样:

        TypeError: 'int' object is not iterable

      2. 我当然得到错误for col, row, piece in playerPieces:

        那么,还有什么其他选择?可以这样做吗?第二个选项对我来说似乎是最可能的选择,所以我认为理解TypeError是解决问题的关键所在,但我有点不知所措。

3 个答案:

答案 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