2016-05-23 5 views
1

Мой скрипт python анализирует заголовки и ссылки из нескольких RSS-каналов. Я храню эти заголовки в списке, и я хочу, чтобы я никогда не печатал дубликаты. Как мне это сделать?Как я могу сказать python, чтобы НЕ распечатывать элемент в списке?

#!/usr/bin/python 
from twitter import * 
from goose import Goose 
import feedparser 
import time 
from pyshorteners import Shortener 
import pause 
import newspaper 

dr = feedparser.parse("http://www.darkreading.com/rss_simple.asp") 
sm =feedparser.parse("http://www.securitymagazine.com/rss/topic/2654-cyber-tactics.rss") 



dr_posts =["CISO Playbook: Games of War & Cyber Defenses", 
     "SWIFT Confirms Cyber Heist At Second Bank; Researchers Tie Malware Code to Sony Hack","The 10 Worst Vulnerabilities of The Last 10 Years", 
     "GhostShell Leaks Data From 32 Sites In 'Light Hacktivism' Campaign", 
      "OPM Breach: 'Cyber Sprint' Response More Like A Marathon", 
     "Survey: Customers Lose Trust In Brands After A Data Breach", 
     "Domain Abuse Sinks 'Anchors Of Trust'", 
     "The 10 Worst Vulnerabilities of The Last 10 Years", 
] 

sm_posts = ["10 Steps to Building a Better Cybersecurity Plan"] 

x = 1 

while True: 

    try: 

     drtitle = dr.entries[x]["title"] 
     drlink = dr.entries[x]["link"] 
     if drtitle in dr_posts: 
      x += 1 
      drtitle = dr.entries[x]["title"] 
      drtitle = dr.entries[x]["link"] 
      print drtitle + "\n" + drlink 
      dr_posts.append(drtitle) 
      x -= 1 
      pause.seconds(10) 
     else: 
      print drtitle + "\n" + drlink 
      dr_posts.append(drtitle) 
      pause.seconds(10) 

     smtitle = sm.entries[x]["title"] 
     smlink = sm.entries[x]["link"] 
     if smtitle in sm_posts: 
      x +=1 
      smtitle = sm.entries[x]["title"] 
      smtitle = sm.entries[x]["title"] 
      print smtitle + "\n" + smlink 
      sm_posts.append(smtitle) 
      pause.seconds(10) 
    else: 
     print smtitle + "\n" + smlink 
     sm_posts.append(smtitle) 
     x+=1 
     pause.seconds(10) 



except IndexError: 
    print "FAILURE" 
    break 

В настоящее время у меня есть только пропущенные записи. Это было бы проблемой, потому что, если в канале RSS есть еще один дубликат, то у меня будет еще больше дубликатов.

ответ

2

Вы можете использовать структуру данных set, так как ее свойство «уникальности» будет работать для вас. По существу, мы можем сделать ваш список набором, а затем снова установить список, который гарантирует, что ваш список теперь заполнен строго уникальными значениями.

Если у вас есть список л, то вы могли бы сделать его уникальным по

l = list(set(l)) 
+0

Спасибо! Это действительно помогло мне! – Frank

+0

Без проблем мужчина! Glsd это помогло. Не стесняйтесь отмечать мой ответ как принятый (флажок) –

0

Если вы не хотите, чтобы напечатать повторяющуюся ссылку вы можете использовать counter или defaultdict

sm_posts = defaultdict(int) 
sm_posts[sm_links] += 1 
print sm_posts.keys() #will print all the unique links 

хорошо, что вы также можете получить количество повторений ссылок, сделав

sm_posts[sm_links] 
>>> link_counts 

попробуйте.