0

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

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

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

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

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

4

2 回答 2

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']]
于 2013-02-27T05:54:02.630 回答
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的答案。

于 2013-02-27T06:02:58.003 回答