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]
的每个连续赋值都会覆盖前一个。
我在玩字典,想着如何使用推导来创建字典。我以为
{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]
的每个连续赋值都会覆盖前一个。