我有两个列表 - 列表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
答案 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]}