Python列表列表合并

时间:2013-02-27 05:49:39

标签: python

说我有一个这样的列表列表:(假设您不知道此列表中有多少列表)

list=[['food','fish'],['food','meat'],['food','veg'],['sports','football']..]

如何合并列表中的项目,如下所示:

list=[['food','fish','meat','veg'],['sports','football','basketball']....]

,即如果它们包含相同的项目,则将所有嵌套列表合并到同一列表中。

2 个答案:

答案 0 :(得分:4)

使用defaultdict创建一个将类型映射到值的字典,然后获取项目:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> items = [['food','fish'],['food','meat'],['food','veg'],['sports','football']]
>>> for key, value in items:
...     d[key].append(value)
...     
>>> [[key] + values for key, values in d.items()]
    [['food', 'fish', 'meat', 'veg'], ['sports', 'football']]

答案 1 :(得分:2)

defaultdict的“强制”替代方案,它可以更好地处理已按密钥顺序排列的数据,如果您不想在其上构建数据结构(即,只是在组上工作)。

data = [['food','fish'],['food','meat'],['food','veg'],['sports','football']]

from itertools import groupby
print [[k] + [i[1] for i in v] for k, v in groupby(data, lambda L: L[0])]

但是defaultdict更灵活,更容易理解 - 所以请使用@ Blender的回答。