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

FOR loop should yield multiple results, but only yields one

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

我已经将这个过程分解为简单的步骤,但仍然对创建新词典感到困惑!如下所示,它确实创建了一个字典object,但它并不全面——它只包含单篇文章的标题, URL 和描述-- 其余部分不存在。

我试过切换到其他 RSS 提要并得到了相同的结果,所以看起来问题要么是我尝试这样做的方式,要么是生成的列表结构有问题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'}, 
{...}, 
{...}] 

有些东西告诉我这是一个简单的错误 -- 可能是语法错误,或者我忘记了一个小而重要的细节。

您提供的代码示例一遍又一遍地对同一个字典执行 update。所以,在循环结束时你只会得到一个字典。您的示例数据显示,您实际上想要 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)

问题似乎出在您使用的是字典而不是列表。然后你正在更新 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 变量定义为列表。然后在循环中我们将字典添加到这个列表中,所以它会给你你想要的数据结构。

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