Python-检查dict中是否有两个值(字符串)

Python-检查dict中是否有两个值(字符串),python,Python,这是格言: a = {u'jQuery': {'categories': [u'javascript-frameworks']}, u'Twitter Bootstrap': {'categories': [u'web-frameworks']}, u'WooCommerce': {'categories': [u'ecommerce']}, u'mod_ssl': {'categories': [u'web-server-extensions']}, u'Font Awesome':

这是格言:

a = {u'jQuery': {'categories': [u'javascript-frameworks']},
 u'Twitter Bootstrap': {'categories': [u'web-frameworks']},
 u'WooCommerce': {'categories': [u'ecommerce']},
 u'mod_ssl': {'categories': [u'web-server-extensions']},
 u'Font Awesome': {'categories': [u'font-scripts']}, 
 u'Modernizr': {'categories': [u'javascript-frameworks']},
 u'OpenSSL': {'categories': [u'web-server-extensions']},
 u'AddThis': {'categories': [u'widgets']},
 u'UNIX': {'categories': [u'operating-systems']},
 u'Gravatar': {'categories': [u'miscellaneous']},
 u'Google Font API': {'categories': [u'font-scripts']},
 u'Apache': {'categories': [u'web-servers']},
 u'WordPress': {'categories': [u'cms', u'blogs']},
 u'PHP': {'categories': [u'programming-languages']}}
如果“cms”和“电子商务”都出现在整本词典中,我需要了解真实情况

我试着这样做:

for key, value in a.items():        
    if 'cms' in value['categories'] and 'ecommerce' in value['categories']:
        print 'lala'
以及:


使用这种方法,即使“cms”不存在,它也会打印“in”。我只希望在两个字符串都存在的情况下才能继续。若要检查它们是否存在于整个dict中,我将创建一组整个dict中的所有类别,并使用该类别:

all_categories = {
    category
    for value in a.values() for category in value['categories']
}

if 'cms' in all_categories and 'ecommerce' in all_categories:
    print("Yes, that strange order of for clauses is actually correct...")

一种完全没有副作用的表达方式:

test = ( any([ u'cms' in c.get('categories') for c in a.values() ]) and
         any([ u'ecommerce' in c.get('categories') for c in a.values() ]) )

注意:如果某些
a.values()
不包含键“categories”,则如果代码要运行,请更改为
c.get('categories',[])

只有第一个可以工作,可能缺少
u
?如果缺少
u
是一个问题,它将始终返回
False
。第一个很好。如果“cms”不是空的,那么第二次尝试基本上会转换为
,而“电子商务”的价值['categories']
,这将始终是
真的
。缺少的
u
不是问题。是的,我认为“u”不是问题。如果没有添加(和…)它会打印。第一种方法看起来不错,但您的列表中没有“cms”和“电子商务”项目…谢谢,这正是我想要的。我糟糕的解释:很好。您可以去掉
any
中的
[
]
,使其成为生成器表达式,而不必构建列表。谢谢。使用
[
]
可能更清晰,但效率肯定更低。
test = ( any([ u'cms' in c.get('categories') for c in a.values() ]) and
         any([ u'ecommerce' in c.get('categories') for c in a.values() ]) )