Я бы создал промежуточный словарь, сопоставляющий каждое имя с максимальной оценкой для этого имени, а затем снова превратил бы его в набор слов:
>>> result = ({'name': 'xxx', 'score': 120L }, {'name': 'xxx', 'score': 100L}, {'name': 'xxx', 'score': 10L}, {'name':'yyy', 'score':20})
>>> from collections import defaultdict
>>> max_scores = defaultdict(int)
>>> for d in result:
... max_scores[d['name']] = max(d['score'], max_scores[d['name']])
...
>>> max_scores
defaultdict(<type 'int'>, {'xxx': 120L, 'yyy': 20})
>>> tuple({name: score} for (name, score) in max_scores.iteritems())
({'xxx': 120L}, {'yyy': 20})
Примечания:
1) Я добавил {'name': 'yyy', 'score': 20}
к вашему примеру данных, чтобы показать, что он работает с кортежем с более чем одним именем.
2) Я использую defaultdict, который предполагает, что минимальное значение для оценки равно нулю. Если оценка может быть отрицательной, вам нужно изменить параметр int в defaultdict (int) на функцию, которая возвращает число, меньшее минимально возможного значения.
Между прочим, я подозреваю, что наличие набора словарей - не лучшая структура данных для того, что вы хотите сделать. Рассматривали ли вы альтернативы, такие как наличие единственного диктанта, возможно, со списком баллов для каждого имени?