我不明白为什么这两个陈述不相等。
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项。
答案 0 :(得分:9)
他们做了很多不同的事情。
第一个在循环的每次迭代中定义一个新的names
值,替换以前的任何值。每次使用一个字典创建新列表时。
第二个是列表推导,它构建一个由0个或更多字典组成的列表,每个字典对应tree.findAll()
返回的一个字典。
要使第一个等同于第二个,您需要先将names
定义为空列表,然后在循环中追加它:
names = []
for item in tree.findAll('item'):
names.append({
'id': item.id.string,
'title': __decodefunction(item.entitle.string)
})
答案 1 :(得分:1)
我明白了
只需更改为
names = []
for item in tree.findAll('item'):
names.extend([{
'id': item.id.string,
'title': __decodefunction(item.entitle.string)
}])