假设我有一个这样的列表:(假设你不知道这个列表中有多少个列表)
list=[['food','fish'],['food','meat'],['food','veg'],['sports','football']..]
如何合并列表中的项目,如下所示:
list=[['food','fish','meat','veg'],['sports','football','basketball']....]
即,如果它们包含相同的项目之一,则将所有嵌套列表合并到同一个列表中。
假设我有一个这样的列表:(假设你不知道这个列表中有多少个列表)
list=[['food','fish'],['food','meat'],['food','veg'],['sports','football']..]
如何合并列表中的项目,如下所示:
list=[['food','fish','meat','veg'],['sports','football','basketball']....]
即,如果它们包含相同的项目之一,则将所有嵌套列表合并到同一个列表中。
用于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']]
“强制”替代方案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的答案。