在Python中查询字典有简写吗?

4 投票
4 回答
2340 浏览
提问于 2025-04-16 14:53

我想执行的查询类型,写成伪代码如下:

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

撰写回答