Python 字典理解未按预期输出

Python Dictionary Comprehension Not Outputting As Expected

我在玩字典,想着如何使用推导来创建字典。我以为

{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}

为什么会这样?我需要进行哪些修改才能获得第一个输出?

你的列表理解等同于嵌套循环:

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]))

每当你在理解上遇到困难时,将其展开到等效循环中。在这种情况下:

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

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