Python字典理解没有按预期输出



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

{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]的赋值都会覆盖前一次赋值。

相关内容

  • 没有找到相关文章

最新更新