Python 将二维列表和一维列表映射到字典

Python 将二维列表和一维列表映射到字典,python,python-2.7,Python,Python 2.7,我有一张单子- index=['a','b','c','d'] 和一个二维列表- val=[[1,11,21,31],[3,13,23,33],[7,17,27,37] 如何在字典中映射这些数组,使其值如下所示- d={'a':[1,3,7],'b':[11,13,17],'c':[21,23,27],'d':[31,33,37]} 最有效的方法是什么 我想通过在2d列表上循环来实现这一点不是很有效吗? 有没有办法使用dict(zip()函数,即映射两个1d列表时的方法 我用dict(zip(i

我有一张单子-

index=['a','b','c','d']

和一个二维列表-
val=[[1,11,21,31],[3,13,23,33],[7,17,27,37]

如何在字典中映射这些数组,使其值如下所示-

d={'a':[1,3,7],'b':[11,13,17],'c':[21,23,27],'d':[31,33,37]}

最有效的方法是什么

我想通过在2d列表上循环来实现这一点不是很有效吗? 有没有办法使用
dict(zip()
函数,即映射两个1d列表时的方法

我用
dict(zip(index,val))
试过了,但它给了我

d={'a':[1,11,21,31],'b':[3,13,23,33],'c':[7,17,27,37]


谢谢。

val
具有形状
(3,4)
,但是为了使用
zip
形成一个
dict
,第一个维度必须匹配索引的数量:在这种情况下,4。您可以通过转置
val
来实现这一点

要转换列表列表,请执行以下操作:

>>> zip(*val)
[(1, 3, 7), (11, 13, 17), (21, 23, 27), (31, 33, 37)]
然后,您可以将结果与索引压缩在一起,形成一个
dict

>>> dict(zip(index, zip(*val)))
{'d': (31, 33, 37), 'a': (1, 3, 7), 'b': (11, 13, 17), 'c': (21, 23, 27)}
输出:

{'a': (1, 3, 7), 'c': (21, 23, 27), 'b': (11, 13, 17), 'd': (31, 33, 37)}
{'a': [1, 3, 7], 'c': [21, 23, 27], 'b': [11, 13, 17], 'd': [31, 33, 37]}
如果您需要列表而不是元组

print dict(zip(index, [list(i) for i in zip(*val)]))
输出:

{'a': (1, 3, 7), 'c': (21, 23, 27), 'b': (11, 13, 17), 'd': (31, 33, 37)}
{'a': [1, 3, 7], 'c': [21, 23, 27], 'b': [11, 13, 17], 'd': [31, 33, 37]}
尝试:


你能详细解释一下吗?我不明白。