如何在python中从数组创建Dict

Mer*_*lin 5 python dictionary

有:

keys = ['a', 'b','c','d']
Run Code Online (Sandbox Code Playgroud)

numpy数组....

array = numpy.array([[1, 2, 3, 5], [6, 7, 8, 10], [11, 12, 13, 15]])
Run Code Online (Sandbox Code Playgroud)

my_dict = {'a': [1,6,11], 'b': [2,7,12], 'c': [3,7,13], 'd': [5,10,15]}
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 18

转置数组,zip()带结果的键并转换为dict:

dict(zip(keys, zip(*array)))
Run Code Online (Sandbox Code Playgroud)

由于array是NumPy数组,您也可以使用

dict(zip(keys, array.T)))
Run Code Online (Sandbox Code Playgroud)


Hoo*_*ked 6

keys = ['a', 'b','c','d']
vals = [[1, 2, 3, 5], [6, 7, 8, 10], [11, 12, 13, 15]]
dict(zip(keys, zip(*vals)))

{'a': (1, 6, 11), 'c': (3, 8, 13), 'b': (2, 7, 12), 'd': (5, 10, 15)}
Run Code Online (Sandbox Code Playgroud)

查看zip(*)对象时发生的事情很有用,这是一个非常有用的技巧:

zip(*vals)

[(1, 6, 11), (2, 7, 12), (3, 8, 13), (5, 10, 15)]
Run Code Online (Sandbox Code Playgroud)

它看起来(并且你会看到另一个答案)就像转置一样!这里有个问题.如果其中一个列表比其他列表短,zip(*)则会过早停止:

 vals = [[1, 2, 3, 5], [6, 7, 8, 10], [11, 12, 13]]
 zip(*vals)

 [(1, 6, 11), (2, 7, 12), (3, 8, 13)]
Run Code Online (Sandbox Code Playgroud)