並べ替え ( を使用してsorted()
)、次にグループ化 ( を使用してから、各グループでitertools.groupby()
使用する必要があります。max()
from operator import itemgetter
from itertools import groupby
key = itemgetter(0)
bestvalues = {tuple(best[:2]): best[2]
for key, group in groupby(sorted(information, key=key), key=key)
for best in (max(group, key=itemgetter(2)),)}
これらはすべて標準ライブラリ モジュールです。
インポートがなければ、2 回ループする必要があります。最初にすべてをグループ化し、次に各グループの最大値を見つけます。
grouped = {}
for tup in information:
grouped.setdefault(tup[0], []).append(tup)
bestvalues = {}
for group in grouped.itervalues():
best = max(group, key=lambda g: g[2])
bestvalues[tuple(best[:2])] = best[2]
デモ:
>>> information = [['U1', 'b1', 12], ['U1', 'b2', 15], ['U1', 'b3', 1], ['U2', 'b1', 6], ['U2', 'b2', 7], ['U2', 'b3', 43]]
>>> key = itemgetter(0)
>>> {tuple(best[:2]): best[2]
... for key, group in groupby(sorted(information, key=key), key=key)
... for best in (max(group, key=itemgetter(2)),)}
{('U1', 'b2'): 15, ('U2', 'b3'): 43}
またはインポートなし:
>>> grouped = {}
>>> for tup in information:
... grouped.setdefault(tup[0], []).append(tup)
...
>>> bestvalues = {}
>>> for group in grouped.itervalues():
... best = max(group, key=lambda g: g[2])
... bestvalues[tuple(best[:2])] = best[2]
...
>>> bestvalues
{('U1', 'b2'): 15, ('U2', 'b3'): 43}