0

次のようなリストのリストがあるとします: (このリストにいくつのリストがあるかわからないとします)

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

次のようにリスト内のアイテムをマージするにはどうすればよいですか:

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

つまり、入れ子になったリストに同じ項目が含まれている場合は、すべてのリストを同じリストにマージします。

4

2 に答える 2

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']]
于 2013-02-27T05:54:02.630 に答える
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の回答を使用してください。

于 2013-02-27T06:02:58.003 に答える