简体   繁体   English

在Python中复杂处理两个列表(带有多个项目的Joins)

[英]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.

相关问题 复杂的python列表处理 - Complex python list processing 在python中的两个列表之间交换列表项? - Swapping list items between two lists in python? 在Python中将多个项目追加到列表列表中 - Append multiple items into list of lists in Python Python,zip多个列表,其中一个列表每个需要两个项目 - Python, zip multiple lists where one list requires two items each 将基于其项目的两个列表列表映射到Python中的列表对 - Mapping two list of lists based on its items into list pairs in Python 通过python list comprehension有条件地将多个项目添加到列表列表 - conditionally adding multiple items to a list of lists via python list comprehension Python:如何生成包含在两个列表中重复的项目的列表 - Python: How to generate list with items repeating in two lists 根据子列表的前两项过滤列表列表-使用NLTK进行自然语言处理 - Filter a list of lists based on the first two items of the sublist - natural language processing with NLTK Python中多个词典和列表字典的高效快速数据存储和处理,以及列表的两个词典的交集 - Efficient and fast Data Storage and Processing in Python of multiple dictionaries and dictionary of lists ad intersection of two dictionaries of lists 遍历列表以将项目分成多个列表 - Python - Iterating through a list to separate items into multiple lists - Python
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM