FOR循环应该产生多个结果,但只产生一个

时间:2017-01-12 06:01:17

标签: python list dictionary rss iteration

我试图从使用feedparser库提取的RSS数据字典中提取非常具体的元素,然后将该数据放入 new 字典中,以便它可以稍后使用Flask调用。我之所以这样做,是因为原始字典包含了大量我不需要的元数据。

我已经将这个过程分解为简单的步骤,但是在创建新词典时一直挂断!如下所示,它 创建一个字典对象,但它并不全面 - 它只包含单篇文章的标题,URL和描述 - 其余部分缺席。

我尝试过转换到其他RSS Feed并获得相同的结果,所以看起来问题就是我尝试这样做的方式,或者问题出现了问题。 feedparser生成的列表结构。

这是我的代码:

from html.parser import HTMLParser
import feedparser

def get_feed():
    url = "http://thefreethoughtproject.com/feed/"
    front_page = feedparser.parse(url)
    return front_page

feed = get_feed()

# make a dictionary to update with the vital information
posts = {}

for i in range(0, len(feed['entries'])):
    posts.update({
        'title': feed['entries'][i].title,
        'description': feed['entries'][i].summary,
        'url': feed['entries'][i].link,
    })

print(posts)

最终,我希望有一个类似下面的词典,除了它继续发表更多文章:

[{'Title': 'Trump Does Another Ridiculous Thing', 
  'Description': 'Witnesses looked on in awe as the Donald did this thing', 
  'Link': 'SomeNewsWebsite.com/Story12345'}, 
{...}, 
{...}] 
某事告诉我这是一个简单的错误 - 也许语法已经关闭,或者我忘记了一个小而重要的细节。

2 个答案:

答案 0 :(得分:3)

您提供的代码示例一遍又一遍地对同一个dict执行update。所以,你只能在循环结束时获得一个dict。您的示例数据显示的是,您实际上需要list字典:

# make a list to update with the vital information
posts = []

for entry in feed['entries']:
    posts.append({
        'title': entry.title,
        'description': entry.summary,
        'url': entry.link,
    })

print(posts)

答案 1 :(得分:2)

似乎问题是您使用的是dict而不是列表。然后你要更新dict的相同键,所以每次迭代都会覆盖最后添加的内容。

我认为以下代码可以解决您的问题:

from html.parser import HTMLParser
import feedparser

def get_feed():
    url = "http://thefreethoughtproject.com/feed/"
    front_page = feedparser.parse(url)
    return front_page

feed = get_feed()

# make a dictionary to update with the vital information
posts = []  # It should be a list


for i in range(0, len(feed['entries'])):
    posts.append({
        'title': feed['entries'][i].title,
        'description': feed['entries'][i].summary,
        'url': feed['entries'][i].link,
    })

print(posts)

因此,您可以看到上面的代码将posts变量定义为列表。然后在循环中我们将dicts添加到此列表中,因此它将为您提供所需的数据结构。

我希望能帮助您解决这个问题。