2013-02-27 48 views
0

说我有清单列表如下:(假设你不知道如何在这个列表名单,数量)Python列表的列表合并

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

我怎样才能在列表中,如合并的项目以下内容:

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

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

回答

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']] 
+0

+1击败我...我正在研究相同的逻辑 – avasal 2013-02-27 05:55:08

+0

啊啊+1 - 关系似乎很明显,现在你已经发布了这个答案 - 谢谢:)(必须要更多的咖啡) – 2013-02-27 05:57:30

+0

哇,真的很多很多。好的解决方案 – xlk3099 2013-02-27 05:58:11

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的答案去。