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 变量定义为列表。然后在循环中我们将字典添加到这个列表中,所以它会给你你想要的数据结构。
我希望能帮助你解决这个问题。
我正在尝试从使用 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 变量定义为列表。然后在循环中我们将字典添加到这个列表中,所以它会给你你想要的数据结构。
我希望能帮助你解决这个问题。