2014-02-12 4 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

Изменения первого 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', [])] 
+0

+1 для ключа-претендента! – kasperhj

0

Предполагая tag не None, я хотел бы сделать это:

articles = [p for p in pages 
      if tag in p.meta.get('tags')] 
Смежные вопросы