如何在python中从两个ndarray列表创建键值对列表?

2024-06-17 19:47:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从我的数据中的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']

如何获得所需的输出?有什么想法吗?谢谢


Tags: 数据方法列表worldvaluenpone键值
2条回答

首先必须flatten列表,然后可以使用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 method/function。它可能比lambda函数快得多

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


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


res={}
for i in range(len(first_ndarray)):
  values = first_ndarray[i]
  keys=second_ndarray[i]
  dictionary = dict(zip(keys, values))
  res.update(dictionary)

print(res)

输出:

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

相关问题 更多 >