【问题标题】:How do I tell python to NOT print an item in a list?如何告诉 python 不要打印列表中的项目?
【发布时间】:2016-05-23 16:40:30
【问题描述】:

我的 python 脚本解析来自多个 RSS 提要的标题和链接。我将这些标题存储在一个列表中,并且我想确保我永远不会打印重复项。我该怎么做?

    #!/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 提要中还有另一个重复项,那么我将有更多的重复项。

【问题讨论】:

    标签: python python-2.7 feedparser goose


    【解决方案1】:

    您可以利用数据结构set,因为它的“唯一性”属性将为您完成工作。本质上,我们可以将您的列表设为一个集合,然后再次将该集合设为一个列表,这样可以确保您的列表现在填充了严格唯一的值。

    如果你有一个列表 l,那么你可以让它独一无二

    l = list(set(l))
    

    【讨论】:

    • 谢谢!这对我很有帮助!
    【解决方案2】:

    如果您不想打印重复链接,可以使用counterdefaultdict

    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
    

    试试看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      相关资源
      最近更新 更多