任何人都可以解释为什么以下嵌套循环的输出是{1:6, 2:6, 3:6}
?
>>> {x:y for x in [1, 2, 3] for y in [4, 5, 6]}
{1:6, 2:6, 3:6}
答案 0 :(得分:2)
my_dict = {x:y for x in [1,2,3] for y in [4,5,6]}
与创建如下相同
my_dict = {}
for x in [1,2,3]:
for y in [4,5,6]:
my_dict[x] = y
如果您展开循环,这将是这样的:
my_dict = {}
my_dict[1] = 4
my_dict[1] = 5
my_dict[1] = 6
my_dict[2] = 4
my_dict[2] = 5
my_dict[2] = 6
my_dict[3] = 4
my_dict[3] = 5
my_dict[3] = 6
您实际上是在字典中插入九个键值对。但是,每次使用已存在的键插入一对时,它都会覆盖以前的值。因此,您最终只得到值为6的每个键的最后一个插入。
答案 1 :(得分:0)
区别在于您正在制作字典与列表。在您自己的示例中,您正在有效地构建字典,并且因为您为同一个键设置了3次不同的值,所以最后一个值会粘住。
你实际上在做:
dict[1] = 4
dict[1] = 5
dict[1] = 6
...
dict[3] = 4
dict[3] = 5
dict[3] = 6
所以最后一个值坚持。
答案 2 :(得分:0)
如果期望创建{1:4, 2:5, 3:6}
,请尝试以下操作:
{x[0]:x[1] for x in zip([1,2,3], [4,5,6])}