在python中组合2个列表列表

时间:2018-04-24 12:01:58

标签: python list merge sublist

我是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]中的第一个元素。 此外,如果第二列表的顺序是改变的并且如果在第一元素中添加了子列表,则仍然可以基于每个元素中的第一索引来合并2个列表。因此,它的工作方式与Ms.Excel中的VLOOKUP或HLOOKUP类似。我们怎么做到这一点?

4 个答案:

答案 0 :(得分:2)

这是一种不假设任何一个列表的特定顺序的方法。

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]]

答案 1 :(得分:2)

您可以引入lookup dict并在没有匹配时设置默认值:

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

此处,默认设置为0

答案 2 :(得分:1)

使用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]]

答案 3 :(得分:1)

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

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]]

这样,第二个列表的顺序无关紧要。