这是我想要执行的查询类型,用伪代码编写:
select blob from blobs where blob['color'] == 'red' having maximum(blob['size'])
显然,我可以在python中写出这样的内容:
redBlobs = [];
for blob in blobs:
if blob['color'] == 'red':
redBlobs.append('blob')
largestBlob = None
for redBlob in redBlobs:
if largestBlob == None or redBlob['size'] > largestBlob['size']:
largestBlob = redBlob
return largestBlob
但我怀疑有更清洁的方法。我是python的新手,所以我仍然非常迫切地接受它。
这是我在查看关于SO的其他一些问题后提出的解决方案:
max([blob for blob in blobs if blob['color'] == 'red'], key = lambda b: b['size'])
据推测,有更好的方法。
答案 0 :(得分:10)
以下给出了最大的blob
编辑:没有红色斑点时捕获异常
import operator
try:
largestBlob = max((blob for blob in blobs if blob['color'] == 'red'),key=operator.itemgetter('size'))
except ValueError:
largestBlob = None
答案 1 :(得分:1)
这将完成这项工作:
redBlobs = filter(lambda b: b['color'] == 'red', blobs)
largestBlob = max(redBlobs, key=lambda b: b['size'])
答案 2 :(得分:1)
PiotrLegnica的答案将返回最大blob的大小,而不是最大的blob本身。要获得最大的blob,请使用max:
的可选“key”参数largestBlob = max((blob for blob in blobs if blob['color'] == 'red'), key=operator.itemgetter('size'))
答案 3 :(得分:0)
如果我是你,我会使用size作为关键字,使用生成器表达式进行文件处理,获取该列表的第一个元素:
largestBlob = sorted((blob for blob in blobs if blob['color'] == 'red'), key=lambda x: -x['size'])[0]