3

有没有办法返回其内部字典的值匹配某些条件的键列表

给定一个 python 字典:

adict = {
    1: {'process':False, 'length':10},
    2: {'process':True, 'length':34},
    ...,
    n: {'process': False, 'length: -3'}
}

有没有办法我可以得到一个键列表 [1, 2, 6...] 谁的内部 dict 符合我想要的标准?

def somefiltering(critieria1, critieria2, critieria3...):
    # for variable number of critieria
    # logic
    return list of keys

我知道我可以简单地“循环”浏览我的字典,但有更好的方法吗?并且

如何格式化 somefiltering 和 format criteria1 以使其工作?
只需输入条件1 =“过程=真”,行不通?

4

3 回答 3

3

这是一种方法:

adict = {1: {'process':False, 'length':10}, 2: {'process':True, 'length':34}, 3:{'process': False, 'length': -3}}

def somefiltering(filterDict, *criteria):
    return [key for key in filterDict if all(criterion(filterDict[key]) for criterion in criteria)]

请注意,您的somefiltering函数需要将字典作为参数。

示例用法:

somefiltering(adict, lambda d:d['process'], lambda d:d['length']>5)
# Result: [2]

somefiltering(adict, lambda d:d['length'] < 20)
# Result: [1, 3]

somefiltering(adict, lambda d:d['process'], lambda d:d['length']<5)
# Result: []
于 2013-10-16T01:11:19.683 回答
1

如果您需要密钥列表,它将是

[k for k,v in adict.items() if creterion(v)]

dict.iteritems()用于 2.x。

于 2013-10-16T00:59:22.690 回答
1

给定一个名为 的可调用列表criteria,以下过滤器表达式将仅列出其对应值满足所有条件的 dict 键。

filter(lambda key: all(crit(adict[key]) for crit in criteria), adict.keys())
于 2013-10-16T01:22:34.630 回答