【问题标题】:Combining 2 lists of lists in python在python中组合2个列表列表
【发布时间】:2018-04-24 12:01:58
【问题描述】:

我是python的新手。我需要根据每个列表中的第一个元素合并 2 个列表列表。以下是列表:

first_list = [['aaa', 551, 10972],
              ['bbb', 552, 10872],
              ['ccc', 553, 11103],
              ['ddd', 554, 10912]]

second_list = [['aaa', 240], 
               ['bbb', 120], 
               ['ccc', 325], 
               ['ddd', 270]]

我写的代码:

join_list = []
for x in range(0, len(first_list)):
    temp = [first_list[x], second_list[x][1]]
    join_list.append(temp)

以下是输出:

join_list =
[[['aaa', 551, 10972], 240],
 [['bbb', 552, 10872], 120],
 [['ccc', 553, 11103], 325],
 [['ddd', 554, 10912], 270]]

我需要展平join_list 中每个元素中的列表列表,例如join_list[0] = ['histogram', 551, 10972, 240] 中的第一个元素。 此外,如果第二个列表的顺序发生变化,并且如果在第一个元素中添加了一个子列表,则仍然可以根据每个元素中的第一个索引合并这两个列表。因此,它就像 Ms.Excel 中的 VLOOKUP 或 HLOOKUP 一样工作。我们该怎么做?

【问题讨论】:

    标签: python list merge sublist


    【解决方案1】:

    这是一种不假定任一列表的特定顺序的方式。

    d = dict(second_list)
    
    res = [i + [d[i[0]]] for i in first_list]
    
    [['aaa', 551, 10972, 240],
     ['bbb', 552, 10872, 120],
     ['ccc', 553, 11103, 325],
     ['ddd', 554, 10912, 270]]
    

    【讨论】:

      【解决方案2】:

      您可以引入lookup dict 并设置默认值以防不匹配:

      lookup = dict(second_list)
      default = 0
      join_list = [i + [lookup.get(i[0], default)] for i in first_list]
      

      这里,默认设置为0

      【讨论】:

        【解决方案3】:

        使用chain 中的itertools 来展平

        演示:

        first_list = [['aaa', 551, 10972],
                      ['bbb', 552, 10872],
                      ['ccc', 553, 11103],
                      ['ddd', 554, 10912]]
        
        second_list = [['aaa', 240], 
                       ['bbb', 120], 
                       ['ccc', 325], 
                       ['ddd', 270]]
        
        from itertools import chain
        print([list(chain(*[v, [second_list[i][1]]])) for i, v in enumerate(first_list)])
        

        输出:

        [['aaa', 551, 10972, 240], ['bbb', 552, 10872, 120], ['ccc', 553, 11103, 325], ['ddd', 554, 10912, 270]]
        

        【讨论】:

        • 你的输出和我的有什么区别?我需要把它们弄平。如果 second_list 的顺序发生变化,是否可以合并它们?
        • 抱歉误会你的问题
        • 您可以使用chain from itertools 来展平。
        【解决方案4】:

        也许这就是你要找的东西:

        d = dict(second_list)
        flat = [a+[d[a[0]]] for a in first_list]
        

        它给了我:

        flat = [['aaa', 551, 10972, 240],
         ['bbb', 552, 10872, 120],
         ['ccc', 553, 11103, 325],
         ['ddd', 554, 10912, 270]]
        

        这样你的第二个列表的顺序就无关紧要了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-03-24
          • 2017-08-30
          • 2022-06-28
          • 1970-01-01
          • 2016-01-08
          • 2019-01-06
          • 1970-01-01
          相关资源
          最近更新 更多