我是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类似。我们怎么做到这一点?
答案 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]]
这样,第二个列表的顺序无关紧要。