有没有办法返回内部字典值与某些条件匹配的键列表
给出一个python dict:
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”,就行不通了?
答案 0 :(得分: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: []
答案 1 :(得分:1)
如果您需要按键列表,那就是
[k for k,v in adict.items() if creterion(v)]
并使用dict.iteritems()
代替2.x。
答案 2 :(得分:1)
给定名为criteria
的可调用对象列表,以下过滤器表达式将仅列出其对应值满足所有条件的dict键。
filter(lambda key: all(crit(adict[key]) for crit in criteria), adict.keys())