我有一个嵌套的字典,如下所示:(超过2个键“很多lala的”)
d={'lala': {'temp1': 'c', 'comp_b': 'bc', 'temp': 'b', 'comp_a': 'ac'}, 'lala1': {'temp1': 'c1', 'comp_b': 'bc1', 'temp': 'b1', 'comp_a': ''}
对于“ a”中的所有父键,我需要检查键(comp_a和comp_b)是否具有有效值。
在这种情况下,“ lala1”的“ comp_a”没有值。所以我需要我的函数只返回“ lala”作为输出。
要检查的父键=>
a= ['lala','lala1']
键的必需值=>
compulsory= ['comp_b','comp_a']
这是我到目前为止的内容:
def check_args(a,d):
compulsory=['comp_b','comp_a']
valid=[]
for a in d:
for elements in compulsory:
try:
if d.get(a,{}).get(elements) !='':
print "Valid"
except:
break
else:
print "Can't parse details of " + a + " as mandatory data missing "
continue
题:
如何返回有效的父密钥,即“ lala”?
有没有更好的方法来做我到目前为止所做的事情?
最佳答案
这是没有try
except
的干净方法
d={'lala': {'temp1': 'c', 'comp_b': 'bc', 'temp': 'b', 'comp_a': 'ac'}, 'lala1': {'temp1': 'c1', 'comp_b': 'bc1', 'temp': 'b1', 'comp_a': ''}}
compulsory= ['comp_b','comp_a']
ok_keys = [k for k,v in d.iteritems() if all([c in v and v[c]!='' for c in compulsory])]
ok_keys #<-- prints ['lala']
逻辑全部发生在列表理解中,列表理解首先循环遍历
d
中的键,并测试所有强制性键是否在d[k]
内并且d[k][c]
值不为空。