[英]Complex processing of two list of lists in Python (with Joins on multiple items)
I have requirement to merge two list of lists while joining/merging them on few items in each list of lists. 我需要合并两个列表列表,同时在每个列表列表中的几个项目上加入/合并它们。 I am very new to the python programming, please bear with me here.
我对python编程非常陌生,请在这里忍受。 I have two list of lists : AppNodes list of lists and Applications list of lists.
我有两个列表列表:AppNodes列表列表和Applications列表列表。 Please see below.
请看下面。 I have tried to do with nested forloops but it just got so dirty and giving me wrong output.
我曾尝试使用嵌套的forloops,但是它太脏了,给了我错误的输出。 Is there a better and efficient way to do it.
有没有更好,更有效的方法来做到这一点。 Please help me on this.
请帮我。 I want to learn a lot in Python.
我想在Python中学到很多东西。
List_Of_Lists_A : (Applications list)
AppliactationName Version AppSpace App_Status
XpathExtensions.application 1.0 DOBAdapter-A Stopped
AWS.bw.enterprise.API.DOBAdapter 1.1 DOBAdapter-A Stopped
AWS.bw.enterprise.API.DOBAdapterExtension2 1.1 DOBAdapter-A Stopped
AWS.bw.enterprise.API.DOBAdapterExtension 1.1 DOBAdapter-A Stopped
List_Of_Lists_B : (Appnodes list)
AppNodeName AppNode_Status AppSpace MgmtPort Agent ConfigState Up Time
DOBAdapter-A-Node4 Running DOBAdapter-A 8888 machine1 InSync 56d 00:23:07
DOBAdapter-A-Node1 Running DOBAdapter-A 8888 Machine2 InSync 56d 01:47:10
DOBAdapter-A-Node3 Running DOBAdapter-A 8888 machine3 InSync 54d 22:39:09
DOBAdapter-A-Node2 Running DOBAdapter-A 8888 machine4 InSync 55d 01:58:12
DOBAdapter-A-Node5 Running DOBAdapter-A 8888 Machine5 InSync 55d 22:38:30
Required Output : (may be in nice tabular format if possible)
Domain AppSpace AppNodeName Port AppNode_Status Application App_Status Version Agent
UAT TestAppSpace DOBAdapter-A-Node4 8888 Running XpathExtensions.application Stopped 1.0 machine1
UAT TestAppSpace DOBAdapter-A-Node4 8888 Running AWS.bw.enterprise.API.DOBAdapter Stopped 1.1 machine1
UAT TestAppSpace DOBAdapter-A-Node4 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension2 Stopped 1.1 machine1
UAT TestAppSpace DOBAdapter-A-Node4 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension Stopped 1.1 machine1
UAT TestAppSpace DOBAdapter-A-Node1 8888 Running XpathExtensions.application Stopped 1.0 machine2
UAT TestAppSpace DOBAdapter-A-Node1 8888 Running AWS.bw.enterprise.API.DOBAdapter Stopped 1.1 machine2
UAT TestAppSpace DOBAdapter-A-Node1 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension2 Stopped 1.1 machine2
UAT TestAppSpace DOBAdapter-A-Node1 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension Stopped 1.1 machine2
UAT TestAppSpace DOBAdapter-A-Node3 8888 Running XpathExtensions.application Stopped 1.0 machine3
UAT TestAppSpace DOBAdapter-A-Node3 8888 Running AWS.bw.enterprise.API.DOBAdapter Stopped 1.1 machine3
UAT TestAppSpace DOBAdapter-A-Node3 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension2 Stopped 1.1 machine3
UAT TestAppSpace DOBAdapter-A-Node3 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension Stopped 1.1 machine3
UAT TestAppSpace DOBAdapter-A-Node2 8888 Running XpathExtensions.application Stopped 1.0 machine4
UAT TestAppSpace DOBAdapter-A-Node2 8888 Running AWS.bw.enterprise.API.DOBAdapter Stopped 1.1 machine4
UAT TestAppSpace DOBAdapter-A-Node2 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension2 Stopped 1.1 machine4
UAT TestAppSpace DOBAdapter-A-Node2 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension Stopped 1.1 machine4
UAT TestAppSpace DOBAdapter-A-Node5 8888 Running XpathExtensions.application Stopped 1.0 machine5
UAT TestAppSpace DOBAdapter-A-Node5 8888 Running AWS.bw.enterprise.API.DOBAdapter Stopped 1.1 machine5
UAT TestAppSpace DOBAdapter-A-Node5 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension2 Stopped 1.1 machine5
UAT TestAppSpace DOBAdapter-A-Node5 8888 Running AWS.bw.enterprise.API.DOBAdapterExtension Stopped 1.1 machine5
The solution to this with nested for loops isn't terrible 使用嵌套的for循环的解决方案并不可怕
output = []
for row in appnodes_list:
table1_item = row[2]
for row2 in apps_list:
table2_item = row2[2]
if table1_item == table2_item:
new_row = row + row2
output.append(new_row)
The only thing you would need to update here is which element to join on. 您需要在这里更新的唯一一件事就是要加入的元素。 This is assuming you are joining on the AppSpace column, which is the second index of each table (hence row[2] and row2[2]) in the code above.
这是假设您要加入AppSpace列,该列是上面代码中每个表的第二个索引(因此,row [2]和row2 [2])。
Comment if you have any questions. 如有任何疑问,请发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.