Python - 列表比较/匹配

时间:2017-01-10 00:06:53

标签: python list python-3.x

我有两个列表 - 列表1包含部件号(非唯一),订单号(空白),作业号(空白),颜色和数量字段。清单2包含部件号(唯一),订单号和作业号字段。我需要根据清单2中的信息填写清单1上的订单号和工号(通过匹配部分#)

列表1(主列表)

Part#(BM001), 订单#(EMPTY), 工作#(EMPTY), 颜色(黑色), 数量(2)

Part#(BM001), 订单#(EMPTY), 工作#(EMPTY), 红色), 数量(4)

部分编号(BM002), 订单#(EMPTY), 工作#(EMPTY), 颜色(绿色), 数量(5)

列表2(值列表)

Part#(BM001), 订单#(26534), 工作#(75)

部分编号(BM002), 订单#(26535), 工作#(76)

期望的结果(我只需要列表1,订单#和作业#填写)

Part#(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 个答案:

答案 0 :(得分:1)

最简单的是使用python dict,然后手动将其转换为列表

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