我正在使用字典,并考虑如何使用推导式创建字典。我认为
{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]
的赋值都会覆盖前一次赋值。