3

これら 2 つのステートメントが等しくない理由がわかりません。

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

彼らは非常に異なることをします。

1 つ目は、ループの反復ごとに新しいnames値を定義し、以前の値を置き換えます。1 つの辞書を含む新しいリストを作成するたびに。

2 つ目はリスト内包表記で、 によって返される要素ごとに 1 つ、0 個以上の辞書で構成されるリストを作成しtree.findAll()ます。

最初のものを2番目のものと同等にするには、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 に答える