簡體   English   中英

如何從python中的兩個ndarray列表創建鍵值對列表?

[英]How to create key-value pair list from two list of ndarray in 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']

我怎樣才能得到我想要的輸出? 任何的想法? 謝謝!

您首先必須展平列表,然后可以使用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 函數快得多。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM