xlk3099
xlk3099

Reputation: 15

Python a List of lists Merge

Say I have a list of list like this: (suppose you have no idea how many lists in this list)

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

how can I merge the items in the list like the following:

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

i.e, merge all the nested lists into the same list if they contain one of the same items.

Upvotes: 0

Views: 111

Answers (2)

Jon Clements
Jon Clements

Reputation: 142226

The "compulsory" alternative to defaultdict which can work better for data that's already in order of the key and if you don't want to build data structures on it (ie, just work on groups)...

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])]

But defaultdict is more flexible and easier to understand - so go with @Blender's answer.

Upvotes: 2

Blender
Blender

Reputation: 298532

Use defaultdict to make a dictionary that maps a type to values and then get the items:

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

Upvotes: 4

Related Questions