一尘不染

给定词典列表,如何消除一个键的重复项,并按另一个排序

algorithm

我有一个工作listdict对象,看起来像这样(的对象不同的顺序排列):

[
    {'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'。上面列表的结果将是:

[
    {'name': 'Baz', 'score': 2},
    {'name': 'Foo', 'score': 3},
    {'name': 'Bar', 'score': 3}
]

我不知道(除了在这里使用的模式,从一个看似愚蠢的循环,不断检查,如果当前dict'name'是在列表中已经然后检查其是否'score'比现有的更高'score'


阅读 191

收藏
2020-07-28

共1个答案

一尘不染

一种方法是:

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'}]
2020-07-28