我有一个工作list的dict对象,看起来像这样(的对象不同的顺序排列):
list
dict
[ {'name': 'Foo', 'score': 1}, {'name': 'Bar', 'score': 2}, {'name': 'Foo', 'score': 3}, {'name': 'Bar', 'score': 3}, {'name': 'Foo', 'score': 2}, {'name': 'Baz', 'score': 2}, {'name': 'Baz', 'score': 1}, {'name': 'Bar', 'score': 1} ]
我想做的是删除重复的名称,只保留每个名称中具有最高名称的一个'score'。上面列表的结果将是:
'score'
[ {'name': 'Baz', 'score': 2}, {'name': 'Foo', 'score': 3}, {'name': 'Bar', 'score': 3} ]
我不知道(除了在这里使用的模式,从一个看似愚蠢的循环,不断检查,如果当前dict的'name'是在列表中已经然后检查其是否'score'比现有的更高'score'。
'name'
一种方法是:
data = collections.defaultdict(list) for i in my_list: data[i['name']].append(i['score']) output = [{'name': i, 'score': max(j)} for i,j in data.items()]
因此输出将是:
[{'score': 2, 'name': 'Baz'}, {'score': 3, 'name': 'Foo'}, {'score': 3, 'name': 'Bar'}]