【问题标题】:Dict Comprehension with index带索引的字典理解
【发布时间】:2021-01-27 15:37:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: python dictionary indexing dictionary-comprehension


    【解决方案1】:

    作为另一个答案的替代方法,我使用列表理解和enumerate 将其映射到字典。

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

    【讨论】:

      【解决方案2】:

      使用itertools.product 创建一个迭代两个范围的迭代器,然后使用enumerate 为该迭代器添加索引:

      from itertools import product
      
      dict_sq = {i: (x, y)
                 for (i, (y, x)) in enumerate(product(range(grid_height), range(grid_height)))}
      

      由于范围相同,您可以使用repeat=2 而不是两次写入范围:

      from itertools import product
      
      dict_sq = {i: (x, y)
                 for (i, (y, x)) in enumerate(product(range(grid_height), repeat=2))}
      

      【讨论】:

        【解决方案3】:

        这应该做你想做的事(迭代 xy 并从中计算 i = x + grid_height * y):

        grid_height = 3
        dct = {x + grid_height * y:
                   (x, y) for y in range(grid_height) for x in range(grid_height)}
        

        或者你可以反过来(迭代i并从中获取x = i//grid_height和)y = i%grid_height):

        dct = {i: (i//grid_height, i%grid_height) for i in range(grid_height**2)}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-28
          • 1970-01-01
          • 2012-05-20
          • 2022-10-06
          • 2014-06-06
          • 2019-02-15
          • 2019-02-11
          相关资源
          最近更新 更多