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

如何从字典分组值中提取所有d字段为最小值的元素?

解决方案

要获取每个分组中所有d值最小的元素,需要分两步操作:

  1. 计算当前分组的最小d值;
  2. 筛选出该分组内所有d值等于最小值的元素;
  3. 将所有分组的结果合并为一个列表。

高效实现方式(推荐)

这种方式每个分组仅计算一次最小d值,适合处理数据量较大的场景:

from operator import itemgetter

a = {
    "key1": [{"a":10,"b":10,"d":0},{"a":100,"b":100,"d":1},{"a":1000,"b":1000,"d":0}], 
    "key2": [{"a":18,"b":135,"d":0},{"a":135,"b":154,"d":10},{"a":123,"b":145,"d":0}],
    "key3": [{"a":145,"b":1455,"d":0},{"a":15,"b":12,"d":1},{"a":14,"b":51,"d":10}]
}

result = []
for group in a.values():
    # 获取当前分组的最小d值
    min_d = min(group, key=itemgetter("d"))["d"]
    # 筛选所有d等于min_d的元素并加入结果列表
    result.extend(item for item in group if item["d"] == min_d)

print(result)

简洁实现方式(嵌套列表推导式)

如果数据量较小,也可以用一行列表推导式完成,代码更简洁但效率略低(每个元素都会触发一次min计算):

from operator import itemgetter

a = {
    "key1": [{"a":10,"b":10,"d":0},{"a":100,"b":100,"d":1},{"a":1000,"b":1000,"d":0}], 
    "key2": [{"a":18,"b":135,"d":0},{"a":135,"b":154,"d":10},{"a":123,"b":145,"d":0}],
    "key3": [{"a":145,"b":1455,"d":0},{"a":15,"b":12,"d":1},{"a":14,"b":51,"d":10}]
}

result = [
    item 
    for group in a.values() 
    for item in group 
    if item["d"] == min(group, key=itemgetter("d"))["d"]
]

print(result)

输出结果

两种方式都会得到你期望的输出:

[
    {'a': 10, 'b': 10, 'd': 0},
    {'a': 1000, 'b': 1000, 'd': 0},
    {'a': 18, 'b': 135, 'd': 0},
    {'a': 123, 'b': 145, 'd': 0},
    {'a': 145, 'b': 1455, 'd': 0}
]

内容的提问来源于stack exchange,提问作者AJW

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:54