【问题标题】:Complex processing of two list of lists in Python (with Joins on multiple items)Python中两个列表列表的复杂处理(多个项目上的连接)
【发布时间】:2018-03-16 03:27:06
【问题描述】:

我需要合并两个列表列表,同时在每个列表列表中的几个项目上加入/合并它们。我对python编程很陌生,请在这里多多包涵。 我有两个列表列表:AppNodes 列表列表和 Applications 列表列表。请看下文。 我曾尝试使用嵌套的 forloops,但它变得如此肮脏并给了我错误的输出。 有没有更好更有效的方法来做到这一点。 请帮助我。我想在 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

【问题讨论】:

  • 每个应用程序都作为一个实例部署在每台机器上。这就是为什么每个 appnode 都在所有 5 台机器上运行所有 4 个应用程序的原因。
  • 作为参数传递的域名和 AppSpace 名称。
  • 域:sys.argv[1] 应用空间:sys.argv[2]

标签: python list pandas numpy


【解决方案1】:

用嵌套的 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)

您唯一需要在此处更新的是要加入的元素。这是假设您要加入 AppSpace 列,这是上面代码中每个表的第二个索引(因此 row[2] 和 row2[2])。

如果您有任何问题,请发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 2016-11-24
    • 1970-01-01
    相关资源
    最近更新 更多