是否有在python中查询字典的简写?

时间:2011-04-01 14:42:01

标签: python syntactic-sugar

这是我想要执行的查询类型,用伪代码编写:

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'])

据推测,有更好的方法。

4 个答案:

答案 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]