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

标签 python algorithm list sorting

我正在处理 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/

相关文章:

c# - 使用 LINQ 获取数字列表中的下一个数字

java - 列表<Map>到对象[]

c# - 反转列表的特定部分 C#

python - 在 Python 中使用列表推导式进行质因数分解

c# - 填充缺失数据的方法或算法

c++ - CPU 缓存感知 C++/C 编程

定义地理围栏并查看点是否在其内部/外部的算法

python - 一种用于跟踪数据库中表历史记录的命令行/API 工具,它是否存在,或者我应该去开发一个吗?

python - 什么是(属性错误 : 'NoneType' object has no attribute '__array_interface__' ) mean?

python - 给定返回 n 维数组的函数,如何创建 n+1 维数组