在Python中合并两个不等长的列表

0 投票
2 回答
967 浏览
提问于 2025-04-17 15:28

我有两个列表。一个看起来像这样:

['jim', 'bob', 'mike', 'kim', 'Alex']

另一个看起来像这样:

['YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'YES', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO', 'NO', 'YES', 'NO', 'YES', 'NO']

列表1中的每个名字对应列表2中的前6个项目。比如,jim对应的是六个'YES',而Alex对应的是'NO', 'NO', 'YES', 'NO', 'YES', 'NO'。有没有办法把这两个列表合并成一个字典呢?

我本来打算写一个函数,像这样:

def people():
    List1[0]=List2[0:6]

但是这样会改变列表1。我尝试了这个:

dict(List1[0]: List2[0:6]) 

但出现了错误。

2 个回答

0

试试用 d = {List1[0] : List2[0:6]} 这个写法。你现在用的 : 语法是在调用字典的构造函数,但其实你需要用 {} 这种方式来实现。

8

你可以使用字典推导式来实现:

{x: l2[6*i:6*(i+1)] for i,x in enumerate(l1)}

如果你想看到一个复杂的版本,使用了itertools库,虽然总会有人提到这个方法,它看起来会像这样:dict(zip(l1, itertools.izip_longest(*[iter(l2)]*6))) …真让人头疼。

撰写回答