2017-01-10 150 views
-1

我有兩個列表 - 列表1有零件號(不唯一),訂單號(空白),工號(空白),顏色和數量字段。清單2包含零件號(唯一),訂單號和工作號碼字段。我需要填寫訂單號和作業號列表1的基礎上,從清單2中的信息(通過匹配部件編號)Python - 列表比較/匹配

表1(mainlist)

零件編號(BM001) 訂單號(空), 招聘#(空), 顏色(黑色), 數量(2)

零件編號(BM001), 訂單號(空), 招聘#(空), 顏色(紅色), 數量(4)

零件編號(BM002), 訂單號(空), 招聘#(空), 顏色(綠色), 數量(5)

表2(ValuesList中)

零件編號(BM001), 訂單號(26534), 招聘#(75)

零件編號(BM002), 訂單號(26535), 招聘#(76)

預期的效果(我只需要清單1中,充滿爲了#和就業#)

零件編號(BM001), 訂單號(26534), 招聘#(75), 顏色(黑), 數量(2)

零件編號(BM001),訂單號(26534),作業#(75),顏色(紅色),數量(4)

零件編號(BM002),令#(26535),作業#(76),顏色(綠色),數量(5)

這是我迄今爲止的代碼(見下文),但它沒有正確匹配數據。我假設有一個更簡單(也更有效)的方式來做到這一點,但在這一點上,我被卡住了。

注意:這是在Dynamo/Revit中,它利用Python訪問Revit API。

預先感謝您。

dataEnteringNode = IN 
mainlist=IN[0] 
valueslist=IN[1] 
outlist=[] 

for i in mainlist: 
    #Part # 
    item0=i[0] 

    #Order # 
    item1="" 

    #Job # 
    item2="" 

    #Color 
    item3=i[3] 

    #QTY. 
    item4=i[4] 


    for j in valueslist: 
     #Job # and Task # 
     if (i[0] == j[0]): 
      item1=j[1] 
      item2=j[2] 


    #Write Data 
    outlist.append(item0) 
    outlist.append(item1) 
    outlist.append(item2) 
    outlist.append(item3) 
    outlist.append(item4) 


#Assign your output to the OUT variable. 
OUT = outlist 
+1

恰恰是在你的名單是什麼?列表在Python中沒有「字段」,所以請具體說明。 –

+0

爲什麼使用'#Part ... item0 = i [0]'而不是命名變量'part'並刪除註釋? – MSeifert

回答

1

最簡單的就是使用python字典,然後將其轉換爲列表中手動

data = {} 
for i in mainlist: 

    data[i[0]] = {'color' : i[3], 'quantity' : i[4]} 

for j in valuelist: 

    if data.get(i[0]): 
     data[i[0]] = {**data[i[0]], 'order' : i[1], 'job' : i[2]} 
    else: 
     data[i[0]] = {'order' : i[1], 'job' : i[2]}