2017-01-10 155 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]}