我正在处理 dict
对象的 list
,看起来像这样(对象的顺序不同):
[
{'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'
。
最佳答案
一种方法是:
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'}]
关于python - 给定字典列表,如何消除一个键的重复项,并按另一个键排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9123831/