3

我不明白为什么这两个陈述不相等。

for item in tree.findAll('item'):
    names = [{
      'id': item.id.string,
      'title': __decodefunction(item.entitle.string)
    }]

它有 1 项,但如果这些语句

names = [{
    'id': item.id.string,
    'title': __decodefunction(item.entitle.string)
}for item in tree.findAll('item')]

它有 6 个项目。

我想使用第一个循环,但它没有显示正确的项目数。正确的输出是 6 个项目。

4

2 回答 2

9

他们做非常不同的事情。

第一个names在循环的每次迭代中定义一个新值,替换之前的任何值。每次您创建一个包含本字典的新列表时。

第二个是列表推导式,它构建一个由 0 个或多个字典组成的列表,每个由tree.findAll().

要使第一个等效于第二个,您需要先定义names为一个空列表,然后在循环中附加到它:

names = []
for item in tree.findAll('item'):
    names.append({
      'id': item.id.string,
      'title': __decodefunction(item.entitle.string)
    })
于 2013-06-01T18:11:42.637 回答
1

收到

改成这个

names = []
for item in tree.findAll('item'):
    names.extend([{
       'id': item.id.string,
       'title': __decodefunction(item.entitle.string)
    }])
于 2013-06-01T18:13:27.233 回答