【问题标题】:Python Dictionary Comprehension Not Outputting As ExpectedPython 字典理解未按预期输出
【发布时间】:2021-11-25 04:02:32
【问题描述】:

我正在玩字典,并考虑如何使用推导式创建字典。我以为

{k:v for k in [0,1,2] for v in [5,8,7]}

将打印为

{0:5, 1:8, 2:7}

但它打印为

{0: 7, 1: 7, 2: 7}

为什么会发生这种情况,我需要进行哪些修改才能获得第一个输出?

【问题讨论】:

  • 键 0、1 和 2 在第一次迭代时将全部设置为 5,然后是 8,然后是 7
  • @BrutusForcus 啊,我明白了,那么使用 zip() 函数会更好吗?
  • 你可以尝试像这样压缩:{k: v for k, v in zip([0, 1, 2], [5, 8, 7])}

标签: python dictionary list-comprehension dictionary-comprehension


【解决方案1】:

每当您在理解上遇到问题时,将其展开到等效的循环中。在这种情况下是这样的:

mydict = {}
for v in [5,8,7]:
    for k in [0,1,2]:
        mydict[k] = v

mydict[k] 的每个连续分配都会覆盖前一个。

【讨论】:

    【解决方案2】:

    您的列表理解相当于嵌套循环:

    result = {}
    for v in [5, 8, 7]:
        for k in [0, 1, 2]:
            result[k] = v
    

    因此,外部循环的每次迭代都会将所有键设置为该值,最后您将获得所有键中的最后一个值。

    使用zip() 并行迭代两个列表。

    {k: v for k, v in zip([0, 1, 2], [5, 8, 7])}
    

    您也可以只使用dict() 构造函数:

    dict(zip([0, 1, 2], [5, 8, 7]))
    

    【讨论】:

      猜你喜欢
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      相关资源
      最近更新 更多