2013-05-02 2 views
0

У меня есть сценарий, где я рылась значения в красивом наборе результатов супа и обрабатывающие их по-разному в зависимости от их содержаний, например:Как удалить повторяющиеся значения из красивого набора результатов супа при сохранении заказа?

for i in bs_result_set: 
    if 'this unique string' in i.text: 
     print 'aaaa' 
    else: 
     print 'bbbb' 

Однако я понял, что единственное условие на самом деле происходит в два раза в результате однако мне не нужно это второе значение репликации, и поэтому вы хотите удалить его из набора результатов в первую очередь.

Я попытался подходить к удалению повторяющихся значений в list (при сохранении порядка), но они, похоже, не работают на объекте, который является красивым набором результатов супа. Например, я использовал логику от this post попробовать:

from collections import OrderedDict 
OrderedDict.fromkeys(bs_result_set).keys() 

Но это, похоже, не удалить повторяющиеся значения.

Итак, мой вопрос заключается в том, как удалить повторяющиеся значения из набора результатов прекрасного супа при сохранении порядка?

+0

Что определяет дубликат хоть? Значения атрибутов равны? Или просто имена атрибутов? Должно ли текстовое содержимое соответствовать точно или только обе имеют одну и ту же подстроку? Как насчет вложенных элементов? –

+0

хорошие вопросы, значения являются точными дубликатами, они оба являются div, содержащими много текста, html-тегов и комментариев. – user1063287

+0

Интересно тогда, что трюк 'OrderedDict.fromkeys() не работает для вас; Элементы BS4 'Tag' определяют равенство именно так; одно и то же имя, те же атрибуты (имена и значения) и одинаковое содержимое (проверено рекурсивно). Можете ли вы проверить, является ли 'elemA == elemB'' True' для элементов, которые, по вашему мнению, являются дубликатами? –

ответ

0

насчет:

h = {} 
for i in bs_result_set: 
    if i not in h: 
     if 'this unique string' in i.text: 
      print 'aaaa' 
     else: 
      print 'bbbb' 
     h[i] = 1 

Если ключ не я но нашли из я (вычисленных, поля и т.д.), вы можете сделать

h = {} 
for i in bs_result_set: 
    key = <some formula involving i> 
    if key not in h: 
     if 'this unique string' in i.text: 
      print 'aaaa' 
     else: 
      print 'bbbb' 
     h[key] = 1 
+0

что делает 'h [i] = 1' делать? заключается в том, что каким-то образом «i» в 'h' ограничивается одним вхождением? – user1063287

+0

* h [i] = 1 * просто добавляет * i * в хэш-таблицу * h * (на самом деле вы можете сделать то же самое с набором). – 2013-05-02 11:13:39

Смежные вопросы