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

3

我有一个列表-

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] }.

最有效的方法是什么?

我想循环遍历二维列表并不是很高效。是否有办法使用dict(zip()函数来完成,就像我们将两个一维列表映射到字典中的那样?

我尝试使用dict(zip(index,val))。但它给出了:

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

谢谢。


你能详细说明一下吗?我不明白。 - deathstroke
3个回答

4
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)}

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

print dict(zip(index, zip(*val)))

输出:

{'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]}

1

尝试:

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

>>> print map(list,zip(*val))
[[1, 3, 7], [11, 13, 17], [21, 23, 27], [31, 33, 37]]

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接