Python 过滤dict of dict中的项目

Python 过滤dict of dict中的项目,python,Python,是否有方法返回其内部dict值与特定条件匹配的键列表 给定一个python命令: adict = { 1: {'process':False, 'length':10}, 2: {'process':True, 'length':34}, ..., n: {'process': False, 'length: -3'} } 有没有一种方法可以让我得到一个键列表[1,2,6…]谁的内在指令符合我想要的标准 def somefiltering(critieria1,

是否有方法返回其内部dict值与特定条件匹配的键列表

给定一个python命令:

adict = {
    1: {'process':False, 'length':10},
    2: {'process':True, 'length':34},
    ...,
    n: {'process': False, 'length: -3'}
}
有没有一种方法可以让我得到一个键列表[1,2,6…]谁的内在指令符合我想要的标准

def somefiltering(critieria1, critieria2, critieria3...):
    # for variable number of critieria
    # logic
    return list of keys
我知道我可以简单地“循环”我的字典,但是有更好的方法吗?而且

如何格式化某些筛选和格式化标准1以使其正常工作?

只需输入criteria1=“process=True”就不行了?

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

[k for k,v in adict.items() if creterion(v)]
并对2.x使用dict.iteritems()。

以下是一种方法:

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: []
somefiltering(adict,lambda d:d['process'],lambda d:d['length']>5)
#结果:[2]
somefiltering(adict,lambda d:d['length']<20)
#结果:[1,3]

somefiltering(adict,lambda d:d['process'],lambda d:d['length']给定名为
条件的可调用项列表,以下筛选器表达式将仅列出其对应值满足所有条件的dict键

filter(lambda key: all(crit(adict[key]) for crit in criteria), adict.keys())

+1“标准”的正确单数。