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