我有一个清单 -
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]
感谢。
答案 0 :(得分:4)
val
的形状为(3,4)
,但为了使用dict
形成zip
,第一个维度必须与索引数相匹配:在这种情况下,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)}
答案 1 :(得分: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]}
答案 2 :(得分: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]}