如何从字典分组值中提取所有d字段为最小值的元素?
解决方案
要获取每个分组中所有d值最小的元素,需要分两步操作:
- 计算当前分组的最小
d值; - 筛选出该分组内所有
d值等于最小值的元素; - 将所有分组的结果合并为一个列表。
高效实现方式(推荐)
这种方式每个分组仅计算一次最小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
相关产品推荐
相关产品推荐

