这很奇怪,这是我第一次从枚举列表创建字典时看到这种行为。假设你有一个这样的列表:
>>> a = [1, 8, 6, 2, 5, 4, 8, 3, 7]
>>> for x, y in enumerate(a):
print(x, y)
Out:
0 1
1 8
2 6
3 2
4 5
5 4
6 8
7 3
8 7
这很有意义。
>>> foo = {x: y for x, y in enumerate(a)}
>>> foo
Out: {0: 1, 1: 8, 2: 6, 3: 2, 4: 5, 5: 4, 6: 8, 7: 3, 8: 7}
但是如果我把索引和值调换一下就会发生各种奇怪的事情:
>>> foo = {y: x for x, y in enumerate(a)}
>>> foo
Out:
{1: 0, 8: 6, 6: 2, 2: 3, 5: 4, 4: 5, 3: 7, 7: 8}
索引1
为什么消失?为什么值8
的索引是6
而不是1
?
我不明白为什么会发生这种情况,以及如何在这种情况下正确地编写字典理解?
因为字典不能包含重复的键,它们保留具有相同键的最后一个元素。