我有这个列表列表:
mylist=[[1, 2, 4, 8], [16, 32, 64, 128], [256, 512, 1024, 2048]]
现在我想创建一个字典,为每个键分配列表中相应索引的值。
在这种情况下:correct_dict={0:1,1:2,2:4,3:8,4:16,...,11:2048}。
我打算用以下函数来做:
def dictionarize3(array):
dict3={}
count_var=0
for i in range(len(array[0]) - 1) :
for j in range(len(array[0]) - 1):
dict3[count_var]=array[i][j]
count_var=count_var+1
return dict3
dict=dictionarize3(mylist)
但这就是我得到的: wrong_dict={0: 1, 1: 2, 2: 4, 3: 16, 4: 32, 5: 64, 6: 256, 7: 512, 8: 1024}.
因此,len(correct_dict)=12,而 len(wrong_dict)=9。
问题是什么让我错过了列表中位于第三列的所有值?
请您参考如下方法:
这是 itertools.chain 的工作
from itertools import chain
mylist=[[1, 2, 4, 8], [16, 32, 64, 128], [256, 512, 1024, 2048]]
mydict = {i:v for i,v in enumerate(chain(*mylist))}
print(mydict)
输出:
{0: 1, 1: 2, 2: 4, 3: 8, 4: 16, 5: 32, 6: 64, 7: 128, 8: 256, 9: 512, 10: 1024, 11: 2048}
Question: What makes me miss all the values that in the list are located in the third column?
range(len(array[0]) - 1)
是在其参数之前以 1 结尾的范围;因此,在您的情况下,一个在 4 - 1 = 3 之前,因此在索引 2 处,它会跳过内部索引为 3 的最后一个元素。
编辑 还有那个外循环
for i in range(len(array[0]) - 1) :
似乎起作用只是巧合,因为外部列表的长度为 3。 你需要的是这个:
for i in range(len(array)):
你的“i”是针对整个外部数组,而不是它的第一个内部元素! :)
