2014-02-12 146 views
2

我在一個集合中有一堆頁面對象。 每個頁面都有一些元信息。 某些頁面有一個稱爲標籤的元標籤,它是一個標籤列表。檢查字典是否包含列表理解中的值

如何選擇具有元標記屬性且該標記包含特定值的頁面?

我在想沿着東西:

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

(此代碼失敗AttributeError: 'dict' object has no attribute 'tags'。)

回答

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

毫無頭緒。這是一個很好的答案。 – kasperhj

4

更改第一andif,並用方括號來訪問字典的項目。

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', [])] 
+0

+1僞裝鑰匙! – kasperhj

0

假設tagNone,我這樣做:

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