"嵌套字典检查键值"

2024-06-28 15:03:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个嵌套字典,如下所示:(超过2个键“很多拉拉”)

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']

以下是我目前所掌握的情况:

^{pr2}$

问题: 如何返回有效的父密钥,即“lala”? 有没有更好的方法来完成我目前所做的事情?在


Tags: gt字典tempacb1bcc1comp
2条回答

如果我正确地理解了这个问题,您想检查字典值是否为所有compulsory元素都有一个值?在

当然还有一种更优雅的方法可以做到这一点:您可以使用列表理解:

e = {}
[key for key in a if all(d.get(key,e).get(c) for c in compulsory)]

all(d.get(key,e).get(c) for c in compulsory)在这里非常重要,因为它是一个过滤条件。因此,all(..)将开始在compulsory列表上枚举,对于每个元素c,它将获取该元素并查看其是否为True。空字符串的truthiness为False,因此这不起作用。如果键不在字典中,那么.get(c)将返回None,它的真实性也是False。在

这里有一个没有tryexcept的干净方法

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]值不是空的。在

相关问题 更多 >