a = [1,2,3,4,4,2,2]
d = {k: v for v, k in enumerate(a)}
print(d)
让我换个说法。
从上面的代码中,这一行到底意味着什么。
{k: v for v, k in enumerate(a)}
首先要枚举(a(。这个内置函数向可迭代对象添加一个计数器,并以枚举对象的形式返回它。因此,对于a中的每个元素,它都会生成一个元组(index,a[index](,其中:index将从0增加到6。
然后对于enumerate(a(中的v,k:我们已经看到enumerate的作用,现在您告诉Python,对于每个循环,元组(index,a[index](由v,k表示。因此,v=index,k=a[inded]。
最后,我们找到{k:v表示枚举(a(中的v,k},这些荣誉表明你正在制作一本词典。k:v告诉您,每个循环都将k作为字典的键,v是相应的值。因此,字典的关键字将存在于a的元素之外,它们对应的值等于列表a中的索引c。
现在你必须记住,在字典中,每个键只能存在一次。因此,当程序遇到字典中已经存在的键时,它会覆盖它。这就是为什么第一个索引为1的"2"不会出现在字典中的原因。因为它首先被索引为5的"2"覆盖,然后此键及其值被最后一个"2"及其索引6覆盖。
#i have added 10 as a last item in your list for easy understanding.
a = [1,2,3,4,4,2,2,10]
d = {k: v for v, k in enumerate(a)} #this is a dictionary comprehension
print(d)
where 'k' returns the items in the list one by one and 'v' returns the count for
each item in list starting from 0.
like k-->v
1-->0
2-->1
3-->2
4-->3
4-->4
2-->5
2-->6
10-->7
The output is {1: 0, 2: 6, 3: 2, 4: 4, 10: 7}
as you know dictionary doesnt allow duplicate keys. when any duplicate key
arrives it rewrites the previous one and holds the latest one.
{1: 0, 2: 6, 3: 2, 4: 4, 10: 7}
as we have 1 in only once in the input list we get 1:0
and for 2 we have three values 1,5,6 as 6 is the latest value. we get
2:6
Like wise happens.