関数を使用itertools.groupby()
して要素を結合します。zipを使用すると、2つの入力リストを2つの出力リストにグループ化できます。
import itertools
import operator
newkey, newdata = [], []
for key, items in itertools.groupby(zip(key, data), key=operator.itemgetter(0)):
# key is the grouped key, items an iterable of key, data pairs
newkey.append(key)
newdata.append(' '.join(d for k, d in items))
これをもう少しzip()
魔法のリスト内包表記に変えることができます。
from itertools import groupby
from operator import itemgetter
newkey, newdata = zip(*[(k, ' '.join(d for _, d in it)) for k, it in groupby(zip(key, data), key=itemgetter(0))])
これには、入力をソートする必要があることに注意してください。groupby
同じである連続するキーに基づいて要素のみをグループ化します。一方、それはその最初のソートされた順序を保持します。