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

时间:2015-10-20 14:10:35

标签: python

这是dict:

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'

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

使用这种方法,即使'cms'不存在,也会打印'in'。我希望它只在两个字符串都存在时继续。

2 个答案:

答案 0 :(得分:2)

要检查它们是否存在于整个字典中,我会在整个字典中创建一组所有类别,并使用它:

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...")

答案 1 :(得分:2)

另一种纯粹没有副作用的表达方式:

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() ]) )

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