【问题标题】:Dict comprehension using index使用索引的字典理解
【发布时间】:2020-10-22 08:23:08
【问题描述】:

如何使用字典推导获得这段代码的等效结果?

dict_sq = dict()
i = 0
for y in range(grid_height):
    for x in range(grid_width):
        dict_sq[(x, y)] = i
        i = i + 1

{(0, 0): 0, (0, 1): 1, (0, 2): 2, (1, 0): 3, (1, 1): 4, (1, 2): 5, (2, 0): 6, (2, 1): 7, (2, 2): 8}

我使用这种方法获得了相同的结果,但键和值颠倒了:

dict(enumerate((x, y) for y in range(grid_height) for x in range(grid_width)))

但我需要索引作为值而不是键。有没有优雅的方式使用枚举?

【问题讨论】:

  • 注意:你有两次grid_height,不应该有grid_width或者像grid_size这样的不同名字吗?
  • 你说得对,我没注意到。

标签: python indexing dictionary-comprehension


【解决方案1】:

使用字典推导一次性反转键和值:

>>> {
...     (x, y): i
...     for i, (x, y)
...     in enumerate((x, y) for x in range(grid_height) for y in range(grid_height))
... }
{(0, 0): 0, (0, 1): 1, (0, 2): 2, (1, 0): 3, (1, 1): 4, (1, 2): 5, (2, 0): 6, (2, 1): 7, (2, 2): 8}

【讨论】:

    【解决方案2】:

    这个怎么样?

    from itertools import product
    d = {(i, j): v for v, (i, j) in enumerate(product(range(grid_height), range(grid_height)))}
    

    【讨论】:

      猜你喜欢
      • 2021-01-27
      • 1970-01-01
      • 2022-10-26
      • 2013-05-28
      • 2018-04-07
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2018-06-21
      相关资源
      最近更新 更多