あなたはここで2つのことをしようとしています:
- ネストされた各リストの最後の要素を取得します。
- これらの要素は、ネストされた各リストの最初の要素でグループ化します。
リスト内包表記を使用して、ネストされた各リストの最後の要素を取得できます。
last_elems = [sublist[-1] for sublist in outerlist]
リスト全体が最初の要素 (id) でソートされている場合itertools.groupby
は、2 番目の部分を実行するために使用できます。
from itertools import groupby
from operator import itemgetter
[[g[-1] for g in group] for id_, group in groupby(outerlist, key=itemgetter(0))]
デモ:
>>> outerlist = [
... [100,'XHS',0],
... [100,'34B',3],
... [100,'42F',1],
... [101,'XHS',2],
... [101,'34B',5],
... [101,'42F',2],
... [102,'XHS',1],
... [102,'34B',2],
... [102,'42F',0],
... [103,'XHS',0],
... [103,'34B',4],
... [103,'42F',2]
... ]
>>> from itertools import groupby
>>> from operator import itemgetter
>>> [[g[-1] for g in group] for id_, group in groupby(outerlist, key=itemgetter(0))]
[[0, 3, 1], [2, 5, 2], [1, 2, 0], [0, 4, 2]]
ソートされていない場合は、最初にソートする必要があります ( を使用outerlist.sort(key=itemgetter)
)。または、ソートされたバージョンが他に必要ない場合は、collections.defaultdict
グループ化のアプローチを使用します。
from collections import defaultdict
grouped = defaultdict(list)
for sublist in outerlist:
grouped[sublist[0]].append(sublist[-1])
output = grouped.values()