在Python中查询字典有简写吗?
我想执行的查询类型,写成伪代码如下:
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,所以我现在还是用比较直接的方式来写。
编辑:
这是我在查看了其他一些问题后想到的解决方案:
max([blob for blob in blobs if blob['color'] == 'red'], key = lambda b: b['size'])
可能还有更好的方法。
4 个回答
1
PiotrLegnica的回答会返回最大的“blob”的大小,而不是最大的“blob”本身。要获取最大的“blob”,可以使用max函数中的可选“key”参数:
largestBlob = max((blob for blob in blobs if blob['color'] == 'red'), key=operator.itemgetter('size'))
1
这个代码可以完成这个任务:
redBlobs = filter(lambda b: b['color'] == 'red', blobs)
largestBlob = max(redBlobs, key=lambda b: b['size'])
10
下面的代码可以找到最大的红色区域。
更新: 当没有红色区域时,要捕捉异常。
import operator
try:
largestBlob = max((blob for blob in blobs if blob['color'] == 'red'),key=operator.itemgetter('size'))
except ValueError:
largestBlob = None