合并 python 中的 2 个列表列表
Combining 2 lists of lists in python
我是 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。我们该怎么做?
使用 itertools
中的 chain
来展平
演示:
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]]
这是一种不假定任一列表的特定顺序的方法。
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]]
你可以引入 lookup
dict 并设置默认值以防不匹配:
lookup = dict(second_list)
default = 0
join_list = [i + [lookup.get(i[0], default)] for i in first_list]
这里默认设置为0
。
也许这就是您要找的:
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]]
这样你的第二个列表的顺序就没有关系了。
我是 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。我们该怎么做?
使用 itertools
中的 chain
来展平
演示:
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]]
这是一种不假定任一列表的特定顺序的方法。
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]]
你可以引入 lookup
dict 并设置默认值以防不匹配:
lookup = dict(second_list)
default = 0
join_list = [i + [lookup.get(i[0], default)] for i in first_list]
这里默认设置为0
。
也许这就是您要找的:
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]]
这样你的第二个列表的顺序就没有关系了。