Python列表的列表合并
问题描述:
说我有清单列表如下:(假设你不知道如何在这个列表名单,数量)Python列表的列表合并
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的答案去。
+1击败我...我正在研究相同的逻辑 – avasal 2013-02-27 05:55:08
啊啊+1 - 关系似乎很明显,现在你已经发布了这个答案 - 谢谢:)(必须要更多的咖啡) – 2013-02-27 05:57:30
哇,真的很多很多。好的解决方案 – xlk3099 2013-02-27 05:58:11