Python - 列表比较/匹配
问题描述:
我有两个列表 - 列表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
答
最简单的就是使用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]}
恰恰是在你的名单是什么?列表在Python中没有“字段”,所以请具体说明。 –
为什么使用'#Part ... item0 = i [0]'而不是命名变量'part'并删除注释? – MSeifert