マッピングを使用して ID とそのスコアを追跡します。
from collections import defaultdict
id_to_scores = defaultdict(list)
for entry in l:
id_to_scores[entry['id']].append(entry['s'])
output = [{'id': k, 's': max(v)} for k, v in id_to_scores.iteritems()]
.items()
Python 3 を使用している場合は、代わりに使用してください。
結果 ( adict
には決まった順序がないため、順序が変更されました):
>>> [{'id': k, 's': max(v)} for k, v in id_to_scores.iteritems()]
[{'s': 1.5, 'id': 1}, {'s': 0.6, 'id': 3}]
これにより、辞書が再構築されます。他のキーが関係している場合はid
、スコアだけでなく、それぞれの辞書全体を保存する必要があります。
per_id = defaultdict(list)
for entry in l:
per_id[entry['id']].append(entry)
output = [max(v, key=lambda d: d['s']) for v in per_id.itervalues()]