首页 > 解决方案 > 如何从python中的两个ndarray列表创建键值对列表?

问题描述

我正在尝试从我的数据中的 2 ndarray 制作键值对。为此,我尝试遍历每个 ndarray 列表尝试将它们放在一起,但这对我来说不太有效。任何人都可以建议这样做的可能方式吗?任何想法?

数据和我的尝试

这是我需要从中制作字典的第一个 ndarray 列表:

['267']
['354' '783']
['21488']
['6063A']
['86R']
['969']
['332']
['630']
['788']
['8']
['27']
['278']
['262' '86K']

这是 ndarray 的第二个列表:

['JBS']
['Cargill' 'Harris Ranch']
['One World']
['Central Valley']
['Cargill']
['JBS']
['FPL']
['CS Beef']
['Aurora Pack']
['National Beef']
['Creekstone']
['Tyson']
['National Beef' 'Cargill']

我的尝试

这是我的尝试:

import numpy as np

for (i,j), value in np.ndenumerate(first_ndarray):
   for(m,n), value_2 in np.ndenumerate(first_ndarray):
       dict= to_dict(value, value_2)

但这对我不起作用,看起来迭代 ndarray 的方式可能是正确的,但不会发生从中生成键值对的情况。谁能指出我如何做到这一点?有什么想法吗?

期望的输出

这是我想要的输出:

['JBS': '267']
['Cargill': '354' , 'Harris Ranch': '783']
['One World': 21488']
['Central Valley':'6063A']
['Cargill':'86R']
['JBS':'969']
['FPL':'332']
['CS Beef':'630']
['Aurora Pack':'788']
['National Beef':'8']
['Creekstone':'27']
['Tyson':'278']
['National Beef':'262', 'Cargill':'86K']

我怎样才能得到我想要的输出?任何想法?谢谢!

标签: pythonnumpy

解决方案


您首先必须展平列表,然后您可以使用zip()创建元组列表 (k, v),然后将它们转换为字典。

a = [
    ['A'],
    ['B'],
    ['C','D']
]

b = [
    [1],
    [2],
    [3,4]
]


flatten = lambda l: [item for sublist in l for item in sublist]
            
d = dict(zip(flatten(a), flatten(b)))
print(d)

{'A': 1, 'B': 2, 'C': 3, 'D': 4}

请注意,如果ab是 numpy 数组,则可以直接使用flatten 方法/函数。它可能会比 lambda 函数快得多。


推荐阅读