You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字典列表中按名称保留对应最高数值的字典(去除同名称低数值重复项)

如何从字典列表中按名称保留对应最高数值的字典(去除同名称低数值重复项)

看起来你现在的代码思路有点走偏啦——你把所有name和value分别收集到了一起,最后取的是所有name字符串里的最大值('y'确实比'x'大)和所有value里的最大值,这当然没法得到按名称分组保留对应最大数值的字典列表啦。

问题核心

我们需要按name分组,每个组里只留下value最大的那个完整字典,而不是把name和value拆分开独立处理。

解法一:高效遍历法(推荐)

直接遍历列表,用字典记录每个name对应的最大value字典,逻辑简单且时间复杂度为O(n),适合处理大规模数据:

input_list = [{'name': 'x', 'value': 0.6479667110413355}, 
              {'name': 'x', 'value': 1.0},
              {'name': 'y', 'value': 0.9413355}, 
              {'name': 'y', 'value': 0.9}]

# 用name作为键,保存每个name对应的最大value字典
max_dict = {}
for item in input_list:
    name = item['name']
    # 如果name未记录,或当前item的value更大,就更新记录
    if name not in max_dict or item['value'] > max_dict[name]['value']:
        max_dict[name] = item

# 把字典的值转为列表,就是目标结果
result = list(max_dict.values())
print(result)

运行输出:

[{'name': 'x', 'value': 1.0}, {'name': 'y', 'value': 0.9413355}]

解法二:使用itertools.groupby

如果喜欢用工具函数,可以用groupby实现,但要注意先按name排序(因为groupby只会对连续相同的元素分组):

from itertools import groupby

# 先按name排序,确保同name的元素连续排列
sorted_list = sorted(input_list, key=lambda x: x['name'])
result = []
for name, group in groupby(sorted_list, key=lambda x: x['name']):
    # 在每个分组中筛选出value最大的字典
    max_item = max(group, key=lambda x: x['value'])
    result.append(max_item)

print(result)

这个方法也能得到相同结果,但排序会带来额外的时间开销,适合对代码简洁性要求更高的场景。

备注:内容来源于stack exchange,提问作者anshuk_pal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 20:08:06