检查字典是否包含列表推导中的值

时间:2014-02-12 22:25:46

标签: python

我在集合中有一堆页面对象。 每个页面都有一些元信息。 有些页面有一个名为tag的元组,它是一个标签列表。

如何选择具有元标记属性且该标记包含特定值的网页?

我在考虑一些事情:

articles = [p for p in pages
            and 'tags' in p.meta
            and tag in p.meta.tags]

(此代码无效AttributeError: 'dict' object has no attribute 'tags'。)

3 个答案:

答案 0 :(得分:6)

如果p.meta是包含'tags'密钥的字典,您可以使用p.meta['tags']p.meta.get('tags')执行查找,而不是p.meta.tags。所以最后你的理解可能是这样的:

articles = [p for p in pages
            if 'tags' in p.meta
            and tag in p.meta['tags']]

答案 1 :(得分:4)

将第一个and更改为if,并使用方括号来访问dict项目。

articles = [p for p in pages
            if 'tags' in p.meta and tag in p.meta['tags']]

或者,您可以假装缺少tags密钥是空列表。

articles = [p for p in pages
            if tag in p.meta.get('tags', [])]

答案 2 :(得分:0)

假设tag不是None,我会这样做:

articles = [p for p in pages
            if tag in p.meta.get('tags')]