我有一个嵌套的字典,如下所示:(超过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]值不为空。

10-06 04:06