我会使用映射来跟踪 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}]
这将重建字典。如果涉及其他键,则需要为 each 存储整个字典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()]