【问题标题】:How to iterate through dictionary where keys are pairs?如何遍历键是对的字典?
【发布时间】:2017-08-09 04:26:09
【问题描述】:

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

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

两个玩家都有一本这样的字典。我的问题在于试图迭代玩家的所有棋子。我尝试了三种不同的方法,但似乎都不起作用。

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

    for position, piece in playerPieces:

相反,positionpiece 分别解压缩密钥对的第一个和第二个元素(因此对于通过 playerPieces 的第一次迭代,我会得到 position == 0piece == 0。不是很有帮助。

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

    for (col, row), piece in playerPieces:

我收到错误TypeError: 'int' object is not iterable,目前我不明白。

  1. 最后,如果我去掉列周围的括号,像这样的行对:

    for col, row, piece in playerPieces:

我当然会收到错误ValueError: need more than 2 values to unpack

那么,还有什么其他选择呢?这可以做到吗?第二个选项对我来说似乎是最有可能的,所以我想理解 TypeError 是弄清楚发生了什么的关键,但我有点不知所措。

【问题讨论】:

  • for (col, row), piece in playerPieces.items()...

标签: python dictionary iteration


【解决方案1】:

默认情况下,Python 会遍历字典中的键值,这就是 for position, piece in playerPieces: 简单地从每个键中提取两个值的原因,这也是造成混淆的主要原因。

考虑到这一点,只需遍历键,然后访问每个元素。使用像下面这样的示例将完成您想要做的事情。

for position in playerPieces:
    piece = playerPieces[position]

【讨论】:

    【解决方案2】:

    您需要遍历字典的项目:

    for (col, row), piece in d.items():
        print(col, row, piece)
    

    遍历 dict 只会遍历其键。

    【讨论】:

    • D'OH!现在我觉得自己很傻。一旦经过足够的时间,我会接受这个答案。 >_0
    【解决方案3】:

    使用迭代项:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2015-03-17
      • 2015-04-16
      • 2021-11-23
      • 2017-01-18
      相关资源
      最近更新 更多